頭節點head,快指標fast,慢指標slow。
初始快慢指標都等於head,slow一次走一格,fast一次走兩格。
另外我們現在要達成共識,first_meet節點一定在環內部,即相遇的地方一定是在環裡面的某處。能理解再往下看。
快慢指標第一次相遇時,假設都等於first_meet,即二者在first_meet節點相遇。那麼二者第一次相遇一定是因為快指標把慢指標套圈了,即fast比slow多走了乙個環的周長。我們假設這個周長為circle(比如節點3->節點4->節點5->節點3,這個環的周長是3),則slow指標共走了circle長度,fast共走了兩個circle長度,一減等於circle,正好,沒毛病。
我們想求的是環的入口位置,即環的入口離head頭節點的距離。那麼設這個未知量為x,我們現在要求解x的值。
頭節點到入口距離為x,頭節點到相遇位置距離為circle(忘了怎麼來的回去看第三段),則入口離相遇位置距離為circle-x。從相遇處往後走到環的入口處,走的距離也是circle-x。原因:入口到相遇處距離為circle-x,那麼環的長度減這一段,就等於環上剩下的長度。到這裡我們得到了從頭節點走到環入口的距離等於從相遇處走到環入口的距離的結論,那麼顯然我們就分別從head和first_meet分別往後移動,第二次相遇時的位置就一定是環的入口。
雙指標問題 求鍊錶中環的入口節點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null 思路 把煉表裡的環看做一條跑道,兩個人在勻速跑步,那麼跑的快的那個必然在某一刻會 套圈 所以,設定兩個指標pslow和pfast,pslow一次下乙個節點,pfast一次下兩個節點。如果有環,他倆必然在環中相遇。所以接下的問題...
鍊錶中環的入口結點 題解
coding utf 8 project exuding nlp all author tao time 2019 06 18 14 58 59 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。class listnode def init self,x self.val ...
鍊錶中環的入口節點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過141題,我們知道可以通過快慢指標來判斷是否有環,現在我們假設兩個指標相遇在z點,如圖 那麼我們可以知道fast指標走過a b c b slow指標走過a b 那麼2 a b a b c b 所以a c 那麼此時讓slow回到起點,fast依然...