解決方法:
定義兩個指標fast和slow,其中,fast是快指標,slow是慢指標,二者的初始值都指向煉表頭,slow指標每次前進一步,fast指標每次前進兩步,兩個指標同時向前移動,快指標移動一次都需要和慢指標進行比較,直到相同位置,就可以證明鍊錶是帶環的單鏈表。
public
boolean
isloop
(node head)
while
(fast != null && fast.next != null)
}return
false
;}
首先找到相遇點,然後slow重新指向head,然後移動fast和head,注意步長一致,再次相遇點就是環的入口點
public node findloopport
(node head)
}//這是如果不存在環的話
if(fast == null || fast.next == null)
slow = head;
//注意,這裡不管是慢指標還是快指標都是前進一步
while
(slow != fast)
return slow;
}
檢測單鏈表是否有環
參考 判斷乙個單鏈表是否有環及環的鏈結點 給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇...
如何判斷乙個單鏈表是否有環
題目要求 給定乙個單鏈表的頭指標head,要求寫乙個函式判斷這個單鏈表是否是乙個有環單鏈表。單鏈表中的節點定義如下 struct listnode 方法1 首先定義乙個mapmap,然後從單鏈表的頭指標開始往後遍歷,每次遇到乙個指標p,就判斷map pcur 是否為0,若為0,則將map pcur ...
判斷乙個單鏈表是否有環及環
判斷乙個單鏈表是否有環及環的鏈結點 蒙恩的罪人 給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩...