判斷鍊錶是否有環並求出環的起點

2021-07-13 11:34:20 字數 529 閱讀 5620

判斷鍊錶有無環的方法:

設定乙個快指標速度  != 慢指標的速度,這就是物理裡的相遇問題,我開始犯了乙個錯,我設定快指標和慢指標的速度相等,所以答案出錯,原因是速度相等,那麼它們在座標軸上的速度永遠是平行的,除非陣列的長度很小,可以相遇一次,否則不能相遇。

如果快指標和慢指標相遇則有環。

求環的起點:當兩指標相遇的時候,將快指標指向鍊錶起點,並且速度設定為和慢指標速度相等,當兩指標相遇的時候,此節點則是環的起點。

所以設定快指標速度為2,慢指標速度為1,只要不相等就可以,然後考慮邊界問題,一般都是節點不為空。

下面是求解環的起點**:

/*** definition for singly-linked list.

* class listnode

* }*/

public class solution

return p;

}head = head.next;

node = node.next.next;

}return null;}}

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

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

判斷鍊錶是否有環

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

判斷鍊錶是否有環

單向鍊錶是最常用的資料結構之一,因此總結其常見的問題及其解決方案是很有意義的。問題1 如何判斷乙個單向鍊錶是否有環?如果有,如何找到其入口節點的指標?演算法思想 用兩個指標p1,p2同時指向鍊錶的頭部,p1一次移動一步,p2一次移動兩步,如果最終p1和p2重合則說明鍊錶有環,如果p2走到空指標 鍊錶...