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

2021-06-23 01:46:47 字數 302 閱讀 6159

普通的方法很簡單,首先遍歷一遍單鏈表以確定單鏈表的長度l。然後再次從頭節點出發迴圈l/2次找到單鏈表的中間節點。演算法複雜度為o(l+l/2)=o(3l/2)。

能否再優化一下這個時間複雜度呢?有乙個很巧妙的方法:設定兩個指標* fast、*slow都指向單鏈表的頭節點。其中* fast的移動速度是* slow的2倍。當* fast指向末尾節點的時候,slow正好就在中間了。

void locate(linkedlist *head)else}}

另外,快慢指標在解決單鏈錶環問題的時候是非常有用的,具體請參見《★經典問題—鍊錶中的環問題 》

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

找到未知長度的單鏈表的中間節點普通方法 1.確定單鏈表長度l,2.再次找到l 2次的中間節點。快速方法 快慢指標 原理 設定兩個指標search md都指向單鏈表的頭節點。其中search的移動速度是mid的2倍。當 search指向末尾節點的時候,mid正好就在中間了。這也是標尺的思想。快慢指標要...

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

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

快速找到長度未知的中間節點

利用快慢指標原理 設定兩個指標search mid都指向單鏈表的頭節點。其中 search的移動速度是mid的2倍。當 search指向末尾節點的時候,mid正好就在中間了。這也是標尺的思想。include using namespace std typedef struct node node t...