题目描述
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
C++代码
//把链表分为三部分,中间一部分当做反转链表I的方法
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* p=nullptr,*pp=nullptr;
ListNode* pre=head;
if(m==n)
return head;
for(int i=1;i<=m;i++)
{
pp=p;
p=pre;
pre=pre->next;
}
ListNode* node=pre;
ListNode* behind=node->next;
pre=p;
for(int i=m;i<n;i++)
{
node->next=pre;
pre=node;
node=behind;
if(behind!=nullptr)
behind=behind->next;
}
p->next=node;
if(pp!=nullptr)
{
pp->next=pre;
return head;
}
return pre;
}
};