The basic idea is as follows:
- Create a
new_head
that points tohead
and use it to locate the immediate node before them
-th (notice that it is1
-indexed) nodepre
; - Set
cur
to be the immediate node afterpre
and at each time move the immediate node aftercur
(namedmove
) to be the immediate node afterpre
. Repeat it forn - m
times.
1 class Solution { 2 public: 3 ListNode* reverseBetween(ListNode* head, int m, int n) { 4 ListNode* new_head = new ListNode(0); 5 new_head -> next = head; 6 ListNode* pre = new_head; 7 for (int i = 0; i < m - 1; i++) 8 pre = pre -> next; 9 ListNode* cur = pre -> next; 10 for (int i = 0; i < n - m; i++) { 11 ListNode* move = cur -> next; 12 cur -> next = move -> next; 13 move -> next = pre -> next; 14 pre -> next = move; 15 } 16 return new_head -> next; 17 } 18 };