思路:
先找到m节点,并保存m的前节点pre。然后将m到n 之间的节点按头插法插入到 pre 节点之后。
代码:
ListNode *reverseBetween(ListNode *head, int m, int n) {
if(head==NULL||m==n)
return head;
ListNode* p=head;
ListNode* root=new ListNode(0);
root->next=head;
ListNode* pre=root;
int i=1;
while(p&&i<m){
pre=p;
p=p->next;
i++;
}
if(p==NULL)
return NULL;
while(i<n){
ListNode* next=p->next;
p->next=next->next;
next->next=pre->next;
pre->next=next;
i++;
}
return root->next;
}