How to reverse a singly linked list in-place in Java

1 Answer

0 votes
public class ReverseLinkedList {

    // Node definition
    static class ListNode {
        int val;
        ListNode next;

        ListNode(int val) {
            this.val = val;
        }
    }

    // Reverse method (in-place)
    public static ListNode reverse(ListNode head) {
        ListNode prev = null;
        ListNode current = head;

        while (current != null) {
            ListNode next = current.next;  // save next
            current.next = prev;           // reverse pointer
            prev = current;                // move prev forward
            current = next;                // move current forward
        }

        return prev; // new head
    }

    public static void printList(ListNode head) {
        ListNode temp = head;
        while (temp != null) {
            System.out.print(temp.val + " ");
            temp = temp.next;
        }
        System.out.println();
    }

    // Build a sample list and reverse it
    public static void main(String[] args) {
        // Create list: 1 -> 2 -> 3 -> 4 -> 5
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);

        System.out.println("Original list:");
        printList(head);

        // Reverse the list
        head = reverse(head);

        System.out.println("Reversed list:");
        printList(head);
    }
}


/*
run:

Original list:
1 2 3 4 5 
Reversed list:
5 4 3 2 1 

*/

 



answered 5 days ago by avibootz
...