|
1.問題:如果給定一個單鏈表,如何判斷其是否為有環(huán)鏈表
2.方法:
(1)從給定鏈表的第一個節(jié)點開始遍歷,每遍歷至一個節(jié)點,都將其和所有的前驅(qū)節(jié)點進行比對,如果為同一個節(jié)點,則表明當(dāng)前鏈表中有環(huán);反之,如果遍歷至鏈表最后一個節(jié)點,仍未找到相同的節(jié)點,則證明該鏈表中無環(huán)。
NBQ(S_`2~N$F_E2A_CB`P[2.png (80.23 KB, 下載次數(shù): 118)
下載附件
2021-9-12 11:22 上傳
如上所示,當(dāng)函數(shù)的返回值為 True,表示該鏈表有環(huán);反之若函數(shù)返回值為 False,表明鏈表中無環(huán)。顯然,此實現(xiàn)方案的時間復(fù)雜度為O(n2)。
(2)在一個鏈表中,如果 2 個指針(假設(shè)為 H1 和 H2)都從表頭開始遍歷鏈表,其中 H1 每次移動 2 個節(jié)點的長度(H1 = H1->next->next),而 H2 每次移動 1 個節(jié)點的長度(H2 = H2->next),如果該鏈表為有環(huán)鏈表,則 H1、H2 最終必定會相等;反之,如果該鏈表中無環(huán),則 H1、H2 永遠(yuǎn)不會相遇。
2.png (57.45 KB, 下載次數(shù): 99)
下載附件
2021-9-12 11:24 上傳
本算法的時間復(fù)雜度為 O(n)。
51hei.png (2.48 KB, 下載次數(shù): 91)
下載附件
2021-9-13 04:18 上傳
3.以上源碼:
有環(huán)鏈表判定.7z
(1.09 KB, 下載次數(shù): 5)
2021-9-12 11:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|