Reverse Linked List II Visualizer & Step-by-Step Algorithm Solution

Reverse a singly linked list from position left to position right in a single pass.

Category: linked-list | Difficulty: Medium

Tags: Linked List, Two Pointers, Iterative, In-Place

Reverse Linked List II

D
head
1
2
3
4
5
100%
state
left2
right4
head1
Start
1/33
Explanation

Begin reverseBetween with left = 2, right = 4 on list [1 → 2 → 3 → 4 → 5].

Source Code
1function reverseBetween(head, left, right) {
2 if (!head || !head.next) return head;
3 const dummy = new ListNode(-1, head);
4 let lp = dummy;
5 let rp = head;
6 for (let i = 0; i < left - 1; i++) lp = lp.next;
7 for (let i = 1; i < right; i++) rp = rp.next;
8 const tail = lp.next;
9 let toReversed = lp.next;
10 const remaining = rp.next;
11 rp.next = null;
12 let prev = null;
13 while (toReversed) {
14 const next = toReversed.next;
15 toReversed.next = prev;
16 prev = toReversed;
17 toReversed = next;
18 }
19 tail.next = remaining;
20 lp.next = prev;
21 return dummy.next;
22}