如何判斷鍊錶中是否有環

2021-08-10 01:34:02 字數 667 閱讀 6872

老問題了,定義兩個指標乙個走一步乙個走兩步,判斷是否會相等,如果相等就說明有環。如果fast先到了null那麼就是無環。

之前腦子沒轉過來,想著如果快的那個節點,每次走的時候都剛好將慢的那個跳過咋辦?。。。真的無語。

網上有人按照追擊例子來說明原理,乙個人2m/s,乙個人1m/s。嗯,好像很有道理的樣子,但是想了想沒有說服度。因為解決不了我之前矛盾點:執行的粒度問題,你追擊當然會相遇,因為的粒度和鍊錶做遍歷的粒度不是同級的,乙個是連續的,乙個是離散的(這樣說來好像也不是粒度的事了)。

但轉念一想,又用另一種方式來理解,又沒問題。

如果針對追擊問題是因為連續的所以可能會出現總是跳過慢的指標這種可能存在的話,那麼追擊問題中,兩者相遇的點的時間一定是個非整數!那如果時間是整數,那麼這個相遇的點一定會對應鍊錶上的點的。由於2m/s -1 m/s 之間的速度差是1m/s,所以無論鍊錶的個數是奇數還是偶數,那麼相遇的時間肯定是個整數!所以這種方法如果鍊錶是有環的,那麼肯定會相遇!

附**public boolean isloop(node head)

while (fast != null && fast.next != null)

}return !(fast == null || fast.next == null);

}不知道有沒有人和我有一樣困惑的,希望有些用處。不過應該沒有人像我這麼笨的了

如何判斷鍊錶是否有環 鍊錶是否有環的判斷

對於鍊錶是否存在環,有三個問題需要考慮 1.是否有環 2.入環節點 3.環的長度 第一種方法快慢指標法,也稱之為龜兔演算法,設定兩個指標,慢指標和快指標。最開始均指向鍊錶的頭節點,之後,快指標每次後移兩個節點,慢指標每次後移乙個節點。1.如果快指標指向空,則鍊錶無環 2.若快指標和慢指標再次指向乙個...

如何判斷鍊錶中是否有環

今天面試被問住了,很慚愧啊,回來上網查了一下思路。自己寫了點程式。1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距...

如何判斷鍊錶中是否有環

1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...