leetcode141.环形链表

112 阅读1分钟

给你一个链表的头节点 head ,判断链表中是否有环。

image.png

首先,判断一个链表是否有环,就是这个链表在遍历过程中会进入死循环,一直在一个环里面循环出不来。我们可以把这个想象成一个数学题,相当于跑圈,跑的快的肯定会追上跑的慢的。只要追上了,代表就有环。

所以,我们先设置一个快指针,一次跑两步,然后设置一个慢指针,一次跑一步,最终如果有相等的值,就代表快指针追上了慢指针,就是有环,否则就是没有。 代码如下:

/**
 * @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;
};