leetcode 92. Reverse Linked List II

题意

将链表上第m到n之间的结点反转(原地且一趟)

题解

如题

代码

/**
 * 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 *vhead = new ListNode(0);
        vhead->next = head;
        ListNode *mNode = head, *mPre = vhead;
        int i = 1;
        while(i < m) //find Mth Node
        {
            mPre = mNode;
            mNode = mNode->next;
            i++;
        }
        ListNode *last = mNode;
        int cnt = n - m; 
        while(cnt--) // reverse cnt Node
        {
            ListNode *cur = last->next;
            //delete
            last->next = last->next->next;
            //insert
            cur->next = mPre->next;
            mPre->next = cur;

        }
        return vhead->next; 
    }
};

你可能感兴趣的:(leetcode,链表)