題目描述:
將乙個鍊錶 m 位置到 n 位置之間的區間反轉,要求時間複雜度o(n) ,空間複雜度o(1) 。
例如:
給出的鍊錶為: 1→2→3→4→5→null ,m=2,n=4
返回: 1→4→3→2→5→null注意:
給出的m、n滿足以下條件:
1≤m≤n≤鍊錶長度思路:
將鍊錶分為三段,第一段為頭到m-1,第二段為m到n,第三段為n+1到尾,先斷開一二段,然後對中間的部分進行反轉,最後連線一二三段。
**:
/**
* struct listnode ;
*/class
solution
rhead=ftail-
>next;
//第二段的頭
ftail-
>next=
null
;//第一段和第二段斷開
listnode *prev=
null
,*pcur=rhead,
*pnext=rhead-
>next;
for(
int i=m;i<=n;i++
)//反轉第二段
res=pcur;
//記錄第三段的頭
ftail-
>next=prev;
//第一段的尾連第二段的頭
rhead-
>next=res;
//第二段的尾連第三段的頭
return dummy-
>next;}}
;
總結:
1.鍊錶反轉部分需要非常熟悉。固定區域的反轉,可以通過迴圈次數決定,最後反轉完的pcur是在第三段的頭,而不是第二段的頭,prev是第二段的頭,注意邊界。
2.思路沒有問題,就是寫的時候會有錯,呵呵?
程式設計題 反轉從位置 m 到 n 的鍊錶
解題思路 實現 以上圖來解釋 definition for singly linked list.struct listnode struct listnode reversebetween struct listnode head,int m,int n for i 0 i n m i 實現2 4...
刪除鍊錶中的第n到m個節點
給定乙個鍊錶,刪除鍊錶中的第 n 到 m 個節點,返回鍊錶的頭節點。編號從 00 開始 鍊錶的長度不超過 100000 樣例 1 輸入 head 1 2 3 4 5 null,n 1,m 2 輸出 1 4 5 null樣例 2 輸入 head 1 2 3 4 5 null,n 1,m 4 輸出 1 ...
鍊錶 反轉鍊錶
問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...