int linklist p =l;
//快int linklist q =l;
//慢while
(p->next!=
null
&&q!=
null
&&q!=
null
)
假設無環的部分有x個節點bai,有環部分有y個節點。慢指標du走t步與zhi快指標相遇。
那麼慢指標在環中走的長度為t-x,快指標為2t-x(假設快指標每次走2)。
再假設慢指標在環中走過k1圈,快指標為k2圈。並在環中第n個地方相遇。
則慢指標在環中走的長度為k1y+n,快指標為k2y+n;
可得t-x=k1y+n
2t-x=k2y+n
兩式相減得t=(k2-k1)*y。所以可知慢指標走過y步後可第一次與快指標相遇,再過y步再相遇一次。並且在同乙個地方相遇。
判斷單鏈表是否有環(快慢指標)
方法一 使用p q兩個指標,p總是向前走,但q每次都從頭開始走,對於每個節點,看p走的步數是否和q一樣。如圖,當p從6走到3時,用了6步,此時若q從head出發,則只需兩步就到3,因而步數不等,出現矛盾,存在環。方法二 使用p q兩個指標,p每次向前走一步,q每次向前走兩步,若在某個時候p q,則存...
快慢指標判斷鍊錶是否有環
關於鍊錶是否有環,其實是一系列問題,主要包括以下幾個 使用快慢指標fast和slow,fast每次走兩步,slow每次走一步,如果有環,肯定會相遇,如果沒有,則指標fast遇到null退出。追及相遇問題。在環上相遇後,記錄第一次相遇點為pos,之後指標slow繼續每次走1步,fast每次走2步。在下...
雙指標(快慢指標)判斷鍊錶是否有環
單鏈表的特點是每個節點知道下乙個節點 如果用乙個指標來判斷是否有環,當沒有環時,指標一直會指到鍊錶的為即指到null,但是當有環時,指標將陷入死迴圈,因為環形鍊錶中沒有null指標作為尾部節點 while head null head head.next return false 找到一種經典解法 ...