|
1.問題:如果給定一個(gè)單鏈表,如何判斷其是否為有環(huán)鏈表
2.方法:
(1)從給定鏈表的第一個(gè)節(jié)點(diǎn)開始遍歷,每遍歷至一個(gè)節(jié)點(diǎn),都將其和所有的前驅(qū)節(jié)點(diǎn)進(jìn)行比對(duì),如果為同一個(gè)節(jié)點(diǎn),則表明當(dāng)前鏈表中有環(huán);反之,如果遍歷至鏈表最后一個(gè)節(jié)點(diǎn),仍未找到相同的節(jié)點(diǎn),則證明該鏈表中無環(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)。顯然,此實(shí)現(xiàn)方案的時(shí)間復(fù)雜度為O(n2)。
(2)在一個(gè)鏈表中,如果 2 個(gè)指針(假設(shè)為 H1 和 H2)都從表頭開始遍歷鏈表,其中 H1 每次移動(dòng) 2 個(gè)節(jié)點(diǎn)的長度(H1 = H1->next->next),而 H2 每次移動(dòng) 1 個(gè)節(jié)點(diǎn)的長度(H2 = H2->next),如果該鏈表為有環(huán)鏈表,則 H1、H2 最終必定會(huì)相等;反之,如果該鏈表中無環(huán),則 H1、H2 永遠(yuǎn)不會(huì)相遇。
2.png (57.45 KB, 下載次數(shù): 99)
下載附件
2021-9-12 11:24 上傳
本算法的時(shí)間復(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 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|