【LeetCode】141-環形鏈表

環形鏈表

題目

給定一個鏈表,判斷鏈表中是否有環。

爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。


示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個環,其尾部連接到第二個節點。


示例 2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個環,其尾部連接到第一個節點。


示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環。


進階:
你能用 O(1)(即,常量)內存解決此問題嗎?

解題思路

這道題目可以用快慢指針解決。

快指針每次走 2 步,慢指針每次走 1 步。如果快指針追上慢指針,則說明鏈表中存在環(就像 2 個人在操場上跑步,一個跑得快,一個跑得慢,跑得快的那個最終一定會追上慢的那個)。

代碼

class Solution {
    
    /**
     * 使用快慢指針,快指針每次走2步,慢指針每次走1步,如果快指針追上了慢指針,則說明存在環
     */
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) {
            return false;
        }

        ListNode fast = head;
        ListNode slow = head;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                return true;
            }
        }

        return false;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章