環的入口結點檢測

2021-06-22 05:12:53 字數 613 閱讀 1830

在上述「單鏈錶環的檢測」文章中提了兩種不同寫法的快慢指標(思想是一樣的),只是快慢指標初始位置有所不同,進而造成快慢指標相遇結點不同。這有什麼影響呢?

這回直接影響對「環入口結點檢測」,因為環的入口檢測與快慢指標相遇結點息息相關。 只有當快慢指標同時出發時,相遇結點對環的入口結點檢測有幫助。

乙個指向頭結點的指標與慢指標(指向相遇結點)同時出發,第一次相遇的結點為環的入口結點。詳細的推導請見誠實的偷包賊的部落格:

本文使用在上文中建立的帶環的單鏈表:

//環的入口檢測

pnode circlestart(pnode head)

else if(null==head->next->next)

else }

} //乙個指向頭結點的指標與慢指標(指向相遇結點)同時出發,相遇的結點為環的入口結點

while(1)

}}

執行結果為:

鍊錶環的入口結點

如果乙個鍊錶包含環,如何找出環的入口結點?單鏈表只有乙個指標域,所以環的話一定是後半部分成環或者是一整個。關於這種鍊錶問題,一般都是可以用雙指標來解決。首先考慮特殊情況,不是環 雙指標 鍊錶為none。1.通過pre和latter兩個指標,同時走,pre的速度是latter的兩倍,如果pre小於等於...

鍊錶的環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。struct listnode 資料快慢指標 判斷是否有環就不解釋了,下面主要解釋,為什麼可以那樣找環入口。a b c 只是個簡單圖,就不專門做圖了,湊合表示下吧。也就是a的位置是頭節點,b表示環入口處,c表示快慢指標第一次相遇處。在c處相遇時,設慢指標...

鍊錶中的環的入口結點

學習內容 鍊錶中的環的入口結點 1 思路 如果鍊錶是乙個空鍊錶,或者只有乙個結點的鍊錶,答案是null。如果鍊錶是至少有兩個結點的線性鍊錶,那麼答案也是null。如果鍊錶包含環,那麼入口結點的位址一定出現且僅出現兩次。特別情況就是整個鍊錶是個環,那麼入口結點是這個單鏈表的第乙個結點。要找到整個鍊錶中...