赞
踩
执行结果:
解题思路:
语言:C++
class Solution { public: ListNode* reverseBetween(ListNode* head, int left, int right) { while(left==right||head->next==NULL){return head;} ListNode *dummy=new ListNode(-1); dummy->next=head; ListNode *l=dummy; ListNode *r=dummy; ListNode *p=NULL; ListNode *q=NULL; ListNode *n=NULL; left=left-1; while(left){ l=l->next; left--; } while(right+1){ r=r->next; right--; } p=l->next; q=p->next; p->next=NULL; n=p; while(q!=r){ ListNode *s=q->next; q->next=p; p=q; q=s; } l->next=p; n->next=r; return dummy->next; } };
自己写示例把边界问题测试一下,插入哨兵节点可以避免很多边界问题。
ListNode *dummy=new ListNode(-1);
dummy->next=head;
return dummy->next;
left=left-1;
while(left){
l=l->next;
left--;
}
while(right+1){
r=r->next;
right--;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。