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

2021-07-03 20:33:51 字數 697 閱讀 2992

1、是否帶環判斷:使用追趕的方法,設定兩個指標slow、fast,從頭指標開始,每次分別前進1步、2步。如存在環,則兩者相遇;如不存在環,fast遇到null退出。

2、環的接入點:碰撞點p到連線點的距離=頭指標到連線點的距離,因此,分別從碰撞點、頭指標開始走,相遇的那個點就是連線點。

//判斷單鏈表是否帶環

bool findlisttail(plist &head, plist &hnode)

}return

false;

}//環的接入點

node *findloopport(plist head)

if(fast != slow)

return

null;

fast = head;

while(fast != slow)

return fast;

}//查詢節點

node* find(plist head, datatype x)

tail = tail->_next;

}cout <<

"null"

<< endl;

return

null;

}//單鏈表

void test11()

int main()

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

首先判斷單鏈表是否帶環 我有一篇部落格已經寫過 若帶環 此時快慢指標已經相遇 從此刻起計步,直到下次兩個指標再相遇,快指標步數減去慢指標步數,即為環的長度 得到環的長度後如圖,即可求得入口結點 listnode entrynodeofloop listnode phead 程式執行到此處,兩個指標已...

鍊錶 是否帶環,環的長度以及入口點

求環的入口點 listnode meetnode listnode phead listnode fast phead listnode slow phead while fast next next null if fast next next null slow phead while fast...

求單鏈表是否有環 環長 入環點 鏈長

用兩個快慢指標去判斷單鏈表是否環,快指標的速度是慢指標的兩倍,若單鏈表有環,則兩個指標會先後進入環內,並且快指標會從後面追上慢指標。下面來嚴謹地分析一下兩個指標在環內相遇的情況。假設此時慢指標s和快指標f都在環內,相隔k點,環內共有r點,t時間之後,兩指標相遇。快指標最終位置 慢指標最終位置 2t ...