题意
将链表上第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;
}
};