1.問題:如果給定一個單鏈表,如何判斷其是否為有環鏈表
2.方法:
(1)從給定鏈表的第一個節點開始遍歷,每遍歷至一個節點,都將其和所有的前驅節點進行比對,如果為同一個節點,則表明當前鏈表中有環;反之,如果遍歷至鏈表最后一個節點,仍未找到相同的節點,則證明該鏈表中無環。
如上所示,當函數的返回值為 True,表示該鏈表有環;反之若函數返回值為 False,表明鏈表中無環。顯然,此實現方案的時間復雜度為O(n2)。
(2)在一個鏈表中,如果 2 個指針(假設為 H1 和 H2)都從表頭開始遍歷鏈表,其中 H1 每次移動 2 個節點的長度(H1 = H1->next->next),而 H2 每次移動 1 個節點的長度(H2 = H2->next),如果該鏈表為有環鏈表,則 H1、H2 最終必定會相等;反之,如果該鏈表中無環,則 H1、H2 永遠不會相遇。
本算法的時間復雜度為 O(n)。
3.以上源碼:
有環鏈表判定.7z
(1.09 KB, 下載次數: 5)
2021-9-12 11:25 上傳
點擊文件名下載附件
|