判斷乙個鍊錶是否有環(快慢指標)

2021-09-02 08:05:31 字數 670 閱讀 9954

1. 問題描述:

給出乙個鍊錶判斷該鍊錶是否有環

2. 思路分析:

我們可以使用一種比較經典的方式來進行處理,就是使用兩個指標來進行移動,乙個為快指標,乙個為慢指標,快指標一次移動兩步,慢指標一次移動一步,假如鍊錶有環的話那麼這兩個指標一定會在某乙個地方會相遇的,為什麼呢?有沒有可能不會相遇呢?答案是不可能的,兩個指標一定會在某乙個位置上相遇,因為假如它們沒有相遇,快指標的位置為i + 1,那麼慢指標的位置為i,那麼退回到上一步的狀態,那麼兩個指標的位置都是i,那麼它是一定會相遇的

所以有環的情況之下第二圈的時候快指標追慢指標那麼最後一定會在某乙個位置上相遇。假如鍊錶是沒有環的,那麼慢指標一定會在走的時候更快到達鍊錶的末尾那麼它的next就為空了,所以永遠不可能兩者相遇

在單向鍊錶中經常使用兩個指標的移動相碰的情況下來處理一下經典性的問題

3. 具體的**如下:

public class main	}	

public static void main(string args)

//判斷鍊錶是否為有環鏈表

private static boolean hascircle(listnode node)

} }

快慢指標判斷鍊錶是否有環

關於鍊錶是否有環,其實是一系列問題,主要包括以下幾個 使用快慢指標fast和slow,fast每次走兩步,slow每次走一步,如果有環,肯定會相遇,如果沒有,則指標fast遇到null退出。追及相遇問題。在環上相遇後,記錄第一次相遇點為pos,之後指標slow繼續每次走1步,fast每次走2步。在下...

使用快慢指標判斷鍊錶是否有環

今天做到leetcode 141 linked list cycle,判斷鍊錶是否存在環,因為看到題目中的val都是整數,所以我是將每個node用1.1作為值去mark了,如果head.next的val是1.1,就說明我指向的下個結點已經走過了,這就是乙個環,如果走到最後head走到none了還沒返...

雙指標(快慢指標)判斷鍊錶是否有環

單鏈表的特點是每個節點知道下乙個節點 如果用乙個指標來判斷是否有環,當沒有環時,指標一直會指到鍊錶的為即指到null,但是當有環時,指標將陷入死迴圈,因為環形鍊錶中沒有null指標作為尾部節點 while head null head head.next return false 找到一種經典解法 ...