[路飞]leetcode-141.环形链表

136 阅读1分钟

题目描述

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

如果链表中存在环,则返回 true 。 否则,返回 false 。

快慢节点思路分析

  • 快慢指针,顾名思义,首先需要两个指针,一快一慢

  • 慢指针指向第一个变量,快指针指向下一个,每次向后移动,慢指针每次走一步,快指针每次走两步。

  • 如果链表有环,则快慢指针一定会相遇

  • 如果快慢指针相遇,则链表有环

  • 如果快指针结束,则链表无环

代码实现

var hasCycle = function (head) {
    if (!head || !head.next) return false;
    let preNode = head;
    let nextNode = head.next;
    while (preNode !== nextNode) {
        if (!nextNode || !nextNode.next) return false;
        preNode = preNode.next;
        nextNode = nextNode.next.next;
    }

    return true;
};