AlgoMaster Logo

Reverse Linked List II

values=[1, 2, 3, 4, 5],m=2,n=4
1public ListNode reverseBetween(ListNode head, int m, int n) {
2    if (head == null || m == n) return head;
3
4    ListNode dummy = new ListNode(0);
5    dummy.next = head;
6    ListNode pre = dummy;
7
8    // Move pre to just before reversal start
9    for (int i = 1; i < m; i++) {
10        pre = pre.next;
11    }
12
13    ListNode start = pre.next;  // First node to reverse
14    ListNode then = start.next; // Node to be reversed
15
16    // Reverse the sublist
17    for (int i = 0; i < n - m; i++) {
18        start.next = then.next;
19        then.next = pre.next;
20        pre.next = then;
21        then = start.next;
22    }
23
24    return dummy.next;
25}
0 / 12
0dummy12345head