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
*/