代码
class Solution {
public:
ListNode *reverseBetween(ListNode *head, int m, int n) {
if(head==NULL|m==n)
return head;
ListNode *newHead, *pre, *p, *tail;
newHead = new ListNode(0);
newHead->next = head;
pre = newHead;
p = head;
int i = 1;
while(p!=NULL&&i<m)
{
++i;
pre = p;
p = p->next;
}
while(p!=NULL&&i<n)
{
++i;
p = p->next;
}
tail = p->next;
ListNode *last = pre->next;
ListNode *cur = pre->next->next;
while(cur!=tail)
{
ListNode *tmp = cur->next;
cur->next = pre->next;
pre->next = cur;
cur = tmp;
}
last->next = tail;
return newHead->next;
}
};