一、学习要点:
0.流程简述:
1->2->3->4->5->null
1-> 3->2->4->5->null
1-> 4->3->2->5->null
由此我们可以看出来,总共需要n-m步即可,第一步是将节点3放到节点1的后面,第二步将节点四放到节点1的后面。很有规律的操作,刚开始,pre指向结点1,cur指向结点2,然后我们建立一个临时结点t,指向结点3,然后我们断开结点2和结点3,将节点2的next连接结点4上,也就是cur->next=t->next,在把结点3连接到节点1的后面即结点2的前面,t->next=pre->next,最后再将原来的结点1和结点2的连接断开,将节点1连接到结点3,即pre->next=t;
二、代码:
class Solution
{
public:
ListNode *reverseBetween(ListNode *head,int m,int n)
{
ListNode *dummy=new ListNode(-1),*pre=dummy;
dummy->next=head;
for(int i=0;i<m-1;i++)
{
pre=pre->next;
}
ListNode* cur=pre->next;
for(int i=m;i<n;i++)
{
ListNode* t=cur->next;
cur->next=t->next;
t->next=pre->next;
pre->next=t;
}
return dummy->next;
}
};