快慢指標找煉表中點

2021-08-15 20:01:59 字數 432 閱讀 7066

今天在刷leetcode的題目 palindrome linked list的時候,想出來的解決演算法的空間複雜度都在o(n),不符合題目的限制,在看了幾個部落格以後發現他們的解決方案都用到了乙個方法查詢鍊錶的中點:

快慢指標找鍊錶中點法

演算法的思路是:

定義乙個快指標fast 乙個慢指標slow ,快指標一次移動兩個結點,慢指標一次移動乙個結點

當fast到達鍊錶的尾部結點時,慢指標也就移動到了鍊錶的中間結點(同化成乙個路程問題,同一段路程,a的速度是b的兩倍,他們同時出發,當a走完全程時,b也就剛好走過一半)

**如下:

while(fast&&fast->next)   //條件乙個都不能少,因為鍊錶節點個數可能為為奇數或偶數   

如果結點個數是偶數個的話,slow指向中間兩個元素的右邊那個

鍊錶的中點 快慢指標

include include 鍊錶的操作 也可以直接使用stl中的雙向鍊錶結構list。typedef struct listnode listnode,plistnode 快速尋找鍊錶的中間節點 注 對於尋找鍊錶倒數第n個節點也是同樣的流程 listnode findmidnodeinlist ...

鍊錶的快慢指標 查詢中點

一直做題都是陣列中點,直接算n 2,但是鍊錶的中點怎麼求出來,我還真沒見過,只能說自己做題太少了。今天做leetcode上的題就遇到了,雖然說簡單,但對我來說這是個新的知識點,我得記錄一下,如下 cpp view plain copy listnode findmidnode listnode he...

鍊錶快慢指標

public listnode removenthfromend listnode head,int n 為了找到要刪除的節點的前乙個節點,所以此處讓fast.next null while fast.next null 此時head為倒數第n個節點的前乙個節點。slow.next slow.nex...