判斷單鏈表是否帶環,如果帶環,求環的長度和入口結點

2021-08-04 04:25:03 字數 410 閱讀 2423

//首先判斷單鏈表是否帶環(我有一篇部落格已經寫過),若帶環(此時快慢指標已經相遇),從此刻起計步,直到下次兩個指標再相遇,快指標步數減去慢指標步數,即為環的長度

//得到環的長度後如圖,即可求得入口結點

listnode* entrynodeofloop(listnode* phead)

//程式執行到此處,兩個指標已經相遇,此時我們求環的長度

while ( 1 )

looplength = fastlength - slowlength;

//環長度已知,此時我們來找環的入口結點

帶環單鏈表求中點

首先,對於乙個n節點的單鏈環,如果給定乙個開始節點n0,然後用a,b兩個指標,分別以1和2的步長遍歷,那麼在a環了多少圈 m a距離n0有乙個怎麼樣的偏移量 offset 的情況下,a,b會重合呢?即指向同乙個節點。讓我們跳過費神的數學推導證明什麼的,先給出答案吧。在a走完一圈之後,a,b會回到n0...

1 6帶環單鏈表

定義乙個集合用來存放結點的引用,並將其初始化為空,從鍊錶的頭結點開始向後遍歷,每遍歷到乙個結點就判斷集合中是否有這個結點的引用,如果沒有,說明這個結點是第一次訪問,還沒有形成環,那麼將這個結點的引用新增到集合中去。如果在集合中找到了同樣的結點,那麼說明這個結點已經被訪問過了,於是就形成了環。這種方法...

單鏈表判斷是否帶環,環的接入點

1 是否帶環判斷 使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到null退出。2 環的接入點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的那個點就是連線點。判斷單鏈表是否帶...