The Reverse Linked List II problem involves reversing a portion of a linked list between two given positions left
and right
. The rest of the list remains unchanged.
public ListNode reverseBetween(ListNode head, int left, int right) {
if (head == null || left == right) return head;
// Dummy node to simplify edge cases
ListNode dummy = new ListNode(0);
dummy.next = head;
// Move to the node before the 'left' position
ListNode prev = dummy;
for (int i = 1; i < left; i++) {
prev = prev.next;
}
// Reverse the sublist
ListNode curr = prev.next;
ListNode next = null;
for (int i = 0; i < right - left; i++) {
next = curr.next;
curr.next = next.next;
next.next = prev.next;
prev.next = next;
}
return dummy.next;
}
Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Explanation: The sublist [2,3,4] is reversed.