[LeetCode]Reverse Linked List II
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 *p=head;
ListNode *newhead=NULL,*first,*cur=NULL,*last;
int count=1;
if(m==1) //翻转头结点
{
newhead=first=p;
while(p)
{
if(count==n) return newhead;
p=p->next;count++;
first->next=p->next;
p->next=newhead;
newhead=p;
p=first;
}
}
else
{
newhead=head;
while(p)
{
if(count+1==m)
{
cur=p;
first=cur->next;
}
p=p->next;count++;
if(cur&&count<=n)
{
last=cur->next;
if(p!=first)
{
cur->next=p;
first->next=p->next;
p->next=last;
p=first;
}
}
}
return newhead;
}
return newhead;
}
};

浙公网安备 33010602011771号