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;
    }
};

 

posted @ 2018-09-02 09:24  ly-bnu  阅读(63)  评论(0)    收藏  举报