Reverse a linked list from position?m?to?n. Do it in-place and in one-pass.
For example:
Given?1->2->3->4->5->NULL
,?m?= 2 and?n?= 4,
return?1->4->3->2->5->NULL
.
Note:
Given?m,?n?satisfy the following condition:
1 ≤?m?≤?n?≤ length of list.
/*** 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* preHead=new ListNode(0);//添加一個頭節點,后面省事多了preHead->next=head;ListNode* p=preHead,*tail=preHead;while(--m>0){p=p->next;}do{tail=tail->next;}while(n--);ListNode* q=p,*next=p->next;q->next=tail;p=next;while(p!=tail){ //頭插法next=p->next;p->next=q->next;q->next=p;p=next;}return preHead->next;} };
?