class
solution
return slow;}}
;
如果題目要求輸出的是第乙個中間節點,那麼改為:
//先加個哨兵結點,快慢指標,快指標先走n步,然後快慢一起走,直到快指標走到最後
//時間複雜度o(n)
class
solution
//然後一起走
//劍指offer原題
/*1.判斷有沒有環
2.求出環中的結點個數
從兩個指標相遇的結點開始出發,一邊繼續向前移動一邊計數,當再次回到這個結點時,就可以得到環中的結點個數了。
3.找環的入口結點
先定義兩個指標p1、p2指向煉表頭結點,如果環中有n個結點,則指標p1先在鍊錶上向前移動n步,然後兩個指標均以每次1步的速度向前移動。當p2與p1相遇時,相遇結點就是入口結點。
首先兩個鍊錶各遍歷一次,求出兩個鍊錶的長度l1,l2,然後求出兩個鍊錶的長度差diff。然後先在長鍊表上先走diff步,然後兩個指標一起走,於是第乙個相同的結點就是兩個鍊錶的交點。
class
solution
while
(temp2 !=
null)if
(length_1 > length_2)
while
(heada != headb)
return heada;
}else
while
(heada != headb)
return heada;}}
};
鍊錶快慢指標
public listnode removenthfromend listnode head,int n 為了找到要刪除的節點的前乙個節點,所以此處讓fast.next null while fast.next null 此時head為倒數第n個節點的前乙個節點。slow.next slow.nex...
鍊錶與快慢指標
之前刷劍指offer遇到尋找鍊錶環的入口節點,需要使用到快慢指標,然後題一變,發現自己總是不能立馬聯想起來。總結一下快慢指標法在鍊錶中的一些常見的用處。leetcode 141 快指標每次走2步,慢指標每次走1步,如果鍊錶中有環,則兩個指標就會相遇。public boolean hascycle l...
快慢指標找煉表中點
今天在刷leetcode的題目 palindrome linked list的時候,想出來的解決演算法的空間複雜度都在o n 不符合題目的限制,在看了幾個部落格以後發現他們的解決方案都用到了乙個方法查詢鍊錶的中點 快慢指標找鍊錶中點法 演算法的思路是 定義乙個快指標fast 乙個慢指標slow 快指...