單鏈表面試 找到未知長度的單鏈表的中間節點

2021-09-27 01:25:14 字數 559 閱讀 1634

找到未知長度的單鏈表的中間節點

普通方法:1.確定單鏈表長度l,2.再次找到l/2次的中間節點。

快速方法:快慢指標

原理:設定兩個指標search md都指向單鏈表的頭節點。其中search的移動速度是mid的2倍。當 search指向末尾節點的時候,mid正好就在中間了。這也是標尺的思想。

快慢指標要考慮鍊錶長度的奇偶性。

status getmidnode(linklist i, elemtype *e)

{ linsist s

midwhile (search->next null)

earch移動的速度是mid的2倍

if (search->next->next i= null)

search search->next

mid= mid->next

else

search search->next

e=mid->datai

return ok

騰訊 快速找到未知長度單鏈表的中間節點

普通的方法很簡單,首先遍歷一遍單鏈表以確定單鏈表的長度l。然後再次從頭節點出發迴圈l 2次找到單鏈表的中間節點。演算法複雜度為o l l 2 o 3l 2 能否再優化一下這個時間複雜度呢?有乙個很巧妙的方法 設定兩個指標 fast slow都指向單鏈表的頭節點。其中 fast的移動速度是 slow的...

鏈表面試題 反轉單鏈表

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null解決方案 頭插法開闢新鍊錶並逐個讀取舊鍊錶,頭插進新鍊錶,這樣新的鍊錶與原鍊錶的結構就是反的,需要借助輔助空間 definition for singly linked list.struct listnod...

演算法面試題 快速找到未知長度單鏈表的中間節點

有道演算法面試題 快速找到未知長度單鏈表的中間節點。你可以普通方法也可用比較好的方法,去解決這個問題。由於單鏈表不知道長度,必須遍歷完整個單鏈表才知道單戀表的長度,然後根據一般的長度去找中間結點,這是普通方法。當然題目問的是快速找到,當然要用快速的方法啦。這裡我們快慢指標的方法來解決這個問題,快指標...