劍指offe55 鍊錶中環的入口結點

2021-08-29 21:00:56 字數 486 閱讀 2112

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

做這個題之前,我們應該先明白鍊錶有環是什麼的樣的情況,理解的什麼鍊錶中有環的樣子,我們就可以來理解這個題的思路的。這個題分兩步:

1:先定義兩個節點p1,p2,分別指向鍊錶的頭結點,我們讓p2每次移動兩個節點,讓p1每次移動乙個節點,如果鍊錶中有環,p1肯定會遇到p2,p1==p2,,如果鍊錶長度為n,實際上,p1==p2的時候,p2比p1多走了kn步,這裡可以通過畫圖來理解。這樣我們就找到了p1和p2相遇的節點。

2,當p2==p1,我們讓p2再次指向頭結點,然後再次讓p1和p2每次移動乙個節點,直到相遇,此時便是環的入口處。

/*

public class listnode }*/

public class solution

return p1;

}} return null;

}}

劍指offer 55 鍊錶 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。第一步,找環中相匯點。分別用p1,p2指向鍊錶頭部,p1每次走一步,p2每次走二步,直到p1 p2找到在環中的相匯點。第二步,找環的入口。接上步,當p1 p2時,p2所經過節點數為2x,p1所經過節點數為x,設環中有n個節點,...

劍指offer 55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2...

劍指offer55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。設定塊 慢指標,快指標沒次走兩步,慢指標每次走一步,如果有環,它們一定會相遇 否則快指標會先到最後。相遇後選乙個指標在頭結點,然後與慢指標同時移動,相遇位置就為環入口 走一步和兩步 while slow fast if fas...