鍊錶中環的檢測

2021-09-19 09:32:42 字數 805 閱讀 2870

如何檢測乙個單鏈表中是否有環,例如下圖的例子。

這是最常見的方法。思路就是有兩個指標p1和p2,同時從頭結點開始往下遍歷鍊錶中的所有節點。

p1是慢指標,一次遍歷乙個節點。

p2是快指標,一次遍歷兩個節點。

如果鍊錶中沒有環,p2和p1會先後遍歷完所有的節點。

如果鍊錶中有環,p2和p1則會先後進入環中,一直迴圈,並一定會在在某一次遍歷中相遇。

因此,只要發現p2和p1相遇了,就可以判定鍊錶中存在環。

* 判斷是否有環 快慢指標法

* * @param node

* @return

*/public static boolean hasloopv1(singlenode headnode)

singlenode p = headnode;

singlenode q = headnode.next;

// 快指標未能遍歷完所有節點

while (q != null && q.next != null) else if (p == q)

}return false;}}

鍊錶中環的入口

題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。思路 之前我們判斷鍊錶是否有環,用兩個指標,快慢指標,乙個走一步,乙個走兩步,在此基礎上,當兩個指標相遇,此時肯定在環中,那麼接著計算環的節點數,就利用相遇節點往前走,直到在次回到相遇點,即可計算環的節點數n,然後利...

鍊錶 尋找鍊錶中環的起點

給定乙個單鏈表,若該鍊錶有環,返回環的起點,若沒有,返回null 基本思路 每遇到乙個節點,計數器 當遇到訪問次數為2時,返回該節點,否則在迴圈結束前還沒有找到,則返回null class solution return null 高階思路 雙指標思路,證明 慢指標速度為v 那麼快指標速度為2v 第...

鍊錶 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。知識點回顧 快慢指標 思路 使用快慢指標 假設有p,q兩指標,p每步跨乙個結點,q每步跨兩個結點。那麼經過k步之後q比p多走過的結點數為k。如果鍊錶中沒有環,那麼q永遠在p的前面,兩指標不會相遇。如果鍊錶有環,且環中結點個數為...