如何檢測乙個單鏈表有環並找出環入口點

2021-10-06 23:07:36 字數 695 閱讀 7583

解決方法:

定義兩個指標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步。如存在環,則兩...