給定一個鏈表务荆,判斷鏈表中是否有環(huán)。
如果鏈表中有某個節(jié)點(diǎn)校坑,可以通過連續(xù)跟蹤 next 指針再次到達(dá)拣技,則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán)耍目,我們使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)膏斤。 如果 pos 是 -1,則在該鏈表中沒有環(huán)邪驮。注意:pos 不作為參數(shù)進(jìn)行傳遞莫辨,僅僅是為了標(biāo)識鏈表的實(shí)際情況。
如果鏈表中存在環(huán)毅访,則返回 true 沮榜。 否則,返回 false 喻粹。
進(jìn)階:
你能用 O(1)(即蟆融,常量)內(nèi)存解決此問題嗎?
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個環(huán)守呜,其尾部連接到第二個節(jié)點(diǎn)型酥。
示例 2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個環(huán),其尾部連接到第一個節(jié)點(diǎn)查乒。
示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環(huán)弥喉。
提示:
鏈表中節(jié)點(diǎn)的數(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;
};