给你一个链表的头节点 head ,判断链表中是否有环。
首先,判断一个链表是否有环,就是这个链表在遍历过程中会进入死循环,一直在一个环里面循环出不来。我们可以把这个想象成一个数学题,相当于跑圈,跑的快的肯定会追上跑的慢的。只要追上了,代表就有环。
所以,我们先设置一个快指针,一次跑两步,然后设置一个慢指针,一次跑一步,最终如果有相等的值,就代表快指针追上了慢指针,就是有环,否则就是没有。 代码如下:
/**
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
let fast = head;
let slow = head;
// 快的肯定会先结束,所以用快的指针做判断
while(fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
if (slow === fast) {
return true;
}
}
return false;
};