102 帶環鍊錶

2022-06-12 06:24:07 字數 689 閱讀 9892

**帶環鍊錶得幾個問題

判斷乙個鍊錶是否有環,如果有環,則返回入環的第乙個節點,否則返回null

如果乙個鍊錶有環,遍歷乙個鍊錶便永遠不會到達null,否則必定會到達null。設定兩個指標,剛開始都指向頭節點,遍歷時,乙個指標每次前進一步,我們稱之為慢指標,另乙個每次前進兩步,稱之為快指標,這樣,如果鍊錶沒有環,快指標必然會到達null,如果有環,兩個指標必然會相交於一點。

下面再來看看如何找到入環的第乙個節點,假設從頭節點到入環第乙個節點的長度為m,兩個指標第一次相遇時的節點距離環入口點的長度為t,環的長度為n,那麼此時慢指標走的長度為m+t,快指標走的長度為m+t+kn(k=0,1,2...),kn項表示快指標有可能在環內走了幾圈後再與慢指標相遇,這時滿足

m+t+kn = 2(m+t)

簡化得到

m = (k-1)n + n - t

其中n-t項正表示了慢指標走完當前環還需要走的長度,從這裡就可以看出此時如果將快指標放回頭節點,然後讓它每次只走一步,那麼這兩個指標必然會相交,並且相交的交點就是入環點。

/**

* definition of listnode

* class listnode

* }*/class solution

return ptr1;}}

return null;

}};

lintcode練習 102 帶環鍊錶

給定乙個鍊錶,判斷它是否有環。給出 21 10 4 5,tail connects to node index 1,返回 true 不要使用額外的空間 實現 思路 快慢指標的典型應用,使用快指標 fast 與慢指標 slow,slow每次後移一位,fast 每次後移兩位,當fast 與 slow 指...

Lintcode 102 帶環鍊錶

題目描述 給定乙個鍊錶,判斷它是否有環。這道題如果使用額外空間的話,可以借用set,每走過乙個點就放到set中,當走著走著再次碰到之前的點了就說明有環。下面使用不耗費額外空間的方法 快慢指標實現。解題思路 快慢指標的經典題。快指標每次走兩步,慢指標一次走一步。在慢指標進入環之後,快慢指標之間的距離每...

帶環的鍊錶

帶環的鍊錶 wronsky 單鏈表的問題在面試考試等等等等中頻頻上鏡,大有趕上鳳姐超越芙蓉之勢。假若有乙個蛋疼的程式猿把單鏈表的末尾結點的next指標指向了單鏈表中乙個隨機的結點上,那麼我們經常寫的乙個迴圈while p 或者while p next 就可以父傳子子傳孫子子孫孫無窮盡了。話說怎麼判斷...