鏈表| Leetcode 141

Leetcode 分類刷題 —— 鏈表類(Linked List)

1、題目

Leetcode 141. Linked List Cycle (Linked List Cycle II)

給你一個(gè)鏈表的頭節(jié)點(diǎn) head ,判斷鏈表中是否有環(huán)。如果鏈表中有某個(gè)節(jié)點(diǎn),可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 如果鏈表中存在環(huán) ,則返回 true 。 否則,返回 false 。

2、思路

方法一:用哈希表(HashSet)存儲(chǔ)所有已經(jīng)訪問過的節(jié)點(diǎn),每次我們到達(dá)一個(gè)節(jié)點(diǎn):
如果該節(jié)點(diǎn)已經(jīng)存在于哈希表中,則說明該鏈表是環(huán)形鏈表,否則就將該節(jié)點(diǎn)加入哈希表中。
方法二:快慢指針若相遇則判斷有環(huán):適用于鏈表中獲取倒數(shù)第k個(gè)元素、獲取中間位置的元素、
判斷鏈表是否存在環(huán)、判斷環(huán)的長(zhǎng)度等和長(zhǎng)度與位置有關(guān)的問題。

3、快慢指針 Java 代碼

public class Solution {
    public boolean hasCycle(ListNode head) {
        // 空鏈表、單節(jié)點(diǎn)鏈表一定不會(huì)有環(huán)
        if (head == null || head.next == null) {
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while (slow != fast) {
            if (fast == null || fast.next == null) {
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }
}

參考文章:
https://leetcode.cn/problems/linked-list-cycle/solution/huan-xing-lian-biao-by-leetcode-solution/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容