乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
1、設定一對快慢指標,都從煉表頭出發(快指標每次走兩步,慢指標每次一步)
2、找到兩個指標在環上的相遇點
3、設定兩個指標,分別從煉表頭和相遇點出發
4、上面兩個指標相遇的地方即為環入口
//快慢指標都從頭開始,這樣可以保證只有環的情況下,快慢指標是在head節點相遇的
listnode *p1 = phead;
listnode *p2 = phead;
//找到環上相遇的節點
while( p1 != null && p1->next != null)
return p1;}}
return null;
}
怎麼找到鍊錶環的入口
看了半天 記錄一下 首先 設定乙個快慢指標 快指標 fast 一次走兩步 慢指標 slow 一次走一步 如果鍊錶有環 那麼快慢指標一定會在鍊錶中相遇 相遇時 fast指標 走了 2n 步 slow 指標走了 n步 設 環的 長度為 c 那麼 n c 0 再設 起點 到 環的距離 為 m 這裡最巧妙 ...
找鍊錶環入口
對於乙個給定的鍊錶,返回環的入口節點,如果沒有環,返回null 拓展 你能給出不利用額外空間的解法麼?核心思路 快慢指標 定義乙個快指標每次走兩步 定義乙個慢指標每次走一步 快慢指標相遇則一定在環內,且方向相反 相遇後慢指標從頭開始走,快指標繼續走每次只走一步,最後快慢指標相遇一定是入口 具體計算參...
鍊錶 若單鏈表存在環,如何找到環的入口點。
演算法 這個完全是通過數學推導出來的,設一快 一慢兩個指標,快指標的步長為2,慢指標為1,假設鍊錶起點到環入口點之間的距離為x,環入口點到重合點的距離為y,假設在相遇之前慢指標走的s,則快指標必然走2s,所以有如下公式 s x y 2s nr s 假設環的周長為r,在相遇前快指標走了n圈 由公式2推...