題目描述:判斷給定的鍊錶中是否有環
擴充套件:你能給出不利用額外空間的解法麼?
有環的鍊錶:首先要清楚有環的鍊錶長啥樣,看圖一,有環的鍊錶有什麼特點呢?從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一定會相遇呢?假定...