鏈表反轉2(Reverse Linked List II)

一、學習要點:
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;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章