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

2021-10-01 19:15:21 字數 586 閱讀 3238

單鏈表的特點是每個節點知道下乙個節點

如果用乙個指標來判斷是否有環,當沒有環時,指標一直會指到鍊錶的為即指到null,但是當有環時,指標將陷入死迴圈,因為環形鍊錶中沒有null指標作為尾部節點

while

(head != null)

head = head.next;

return false;

找到一種經典解法

就是用兩個指標,乙個每次前進兩步,乙個每次前進一步。如果不含有環,跑得快的那個指標最終會遇到 null,說明鍊錶不含環;如果含有環,快指標最終會超慢指標一圈,和慢指標相遇,說明鍊錶含有環。

listnode fast, slow;

fast = slow = head;

while

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

return false;

}

雙指標法,指的是在遍歷物件的過程中,不是普通的使用單個指標進行訪問,而是使用兩個相同方向或者相反方向的指標進行掃瞄,從而達到相應的目的

分享兩個鏈結

雙指標雙指標法

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

關於鍊錶是否有環,其實是一系列問題,主要包括以下幾個 使用快慢指標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了還沒返...

判斷鍊錶是否有環 雙指標法

判斷乙個單向鍊錶是否有環 思路 設定雙指標,一快一慢,若有環兩個指標一定相遇 快指標pf每次走一步,以便於遍歷所有結點 慢指標ps每次走兩步,目的是遍歷環中的每乙個結點 include using namespace std 鍊錶結點 typedef struct listnode listnode...