Leetcode 92 Reverse Linked List II
这道题相比Reverse Linked List,结果如下图所示,其实我们不需要再做太多的工作,只需要改变两个指针指向即可。


所以需要在循环之前,保存这两个指针,然后指向正确的位置即可。
另外,要注意的点是index是从1开始的。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseBetween(ListNode* head, int m, int n) { ListNode* dummyHead = new ListNode(-1); dummyHead->next = head; ListNode* prev = dummyHead; for (int i=0; i<m-1; ++i) { prev = prev->next; } ListNode* cur = prev->next; ListNode* restore_prev = prev; ListNode* restore_cur = cur; for(int i=m; i<=n && cur != NULL; ++i) { ListNode* next = cur->next; cur->next = prev; prev = cur; cur = next; } restore_prev->next = prev; restore_cur->next = cur; return dummyHead->next; } };

浙公网安备 33010602011771号