判斷鍊錶有沒有環

2021-10-02 06:18:12 字數 1168 閱讀 8362

題目描述:

判斷給定的鍊錶中是否有環

擴充套件:你能給出不利用額外空間的解法麼?

有環的鍊錶:

首先要清楚有環的鍊錶長啥樣,看圖一,有環的鍊錶有什麼特點呢?從head開始遍歷,最終會進入環中,在環裡迴圈遍歷,並不會出現null。 

思路:

1、不考慮額外空間問題,即可以運用其他的結構來解決問題。

可以使用雜湊表,每遍歷乙個node在hashmap中尋找有沒有存在該node位址的鍵,如果有則存在環,沒有則將其位址作為鍵加到haspmap中。

2、考慮額外空間問題。

使用快慢兩個指標,fast指標一次走2步,slow指標一次走一步,看圖二

如果有環則兩個指標最終都會在環中遍歷,一定會相遇fast ==slow

如果沒有環,則fast或fast.next會先指向null

注意:寫**時小心空指標的問題,還有一開始就要判斷鍊錶是不是空。 

public class solution 

listnode p1 = head.next;

listnode p2 = head.next.next;

while(p1 != p2 && p2 != null && p2.next != null)

if(p1 == p2)

else}}

public class solution 

listnode slow = head;

listnode fast = head;

//僅用判斷fast,因為fast快,無環一定比slow先為null

while (fast != null && fast.next != null)

}return false;

}

判斷鍊錶有沒有環

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到null退出。2...

判斷單鏈表裡面有沒有環

題目 0.如何判斷單鏈表裡面是否有環?演算法的思想是設定兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步。那麼如果單鏈表存在環,則p和q相遇 否則q將首先遇到null。這裡主要理解乙個問題,就是為什麼當單鏈表存在環時,p和q一定會相遇呢?假定單鏈表的長度為n,並且該單鏈表是環狀的,那麼第i...

判斷單鏈表裡面有沒有環

判斷單鏈表裡面有沒有環 這題目還是慢有意思的。題目 0.如何判斷 單鏈表裡面是否有環?演算法的思想是設定兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步。那麼如果單鏈表存在環,則p和q相遇 否則q將首先遇到null。這裡主要理解乙個問題,就是為什麼當單鏈表存在環時,p和q一定會相遇呢?假定...