一、學習要點:
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;
}
};