算法簡單題:環(huán)形鏈表

給定一個鏈表,判斷鏈表中是否有環(huán)。

如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達,則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),我們使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環(huán)。注意:pos 不作為參數(shù)進行傳遞,僅僅是為了標識鏈表的實際情況。

如果鏈表中存在環(huán),則返回 true 。 否則,返回 false 。

進階:

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

示例 1:


image.png

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

示例 2:


image.png

輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個環(huán),其尾部連接到第一個節(jié)點。

示例 3:


image.png

輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環(huán)。

提示:

鏈表中節(jié)點的數(shù)目范圍是 [0, 104]
-105 <= Node.val <= 105
pos 為 -1 或者鏈表中的一個 有效索引 。

鏈接:https://leetcode-cn.com/problems/linked-list-cycle

解題思路:
這里需要了解到,鏈表,是有盡頭的
如果采取快慢指針的辦法,慢指針一次走一步,快指針一次走兩步,快指針追上慢指針,說明有環(huán),否則,兩個鏈表一起跑完完事,沒環(huán)

解題答案:

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
    if(head==null || head.next == null){
        return false;
    }
    var slow = head;
    var fast = head.next;
    while(slow!=fast){
        if(fast == null || fast.next == null){
            return false;
        }
        slow = slow.next;
        fast = fast.next.next;
    }
    return true;
};
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容