Reverse a linked list from position m ton. 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
.
涉及到对四个节点进行处理,12345->21345->32145->43215->54321
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(m==n)return head;
ListNode*pre =new ListNode (-1);
pre->next=head;
ListNode*prehead=pre;
for(int i=1;i<m;i++)
{
prehead=prehead->next;
}
n-=m;
ListNode* pstart=prehead->next;
//链表反转涉及到四个节点
for(int i=1;i<=n;i++)
{
ListNode* p=pstart->next;
pstart->next=p->next;
p->next=prehead->next;
prehead->next=p;
}
return pre->next;
}
};