[路飞]_leetcode_141.环形链表

87 阅读1分钟

思考

遍历链表时

  • 假设链表没有环,最后指针会指向null。
  • 假设链表有环,那么指针就会一直在那个环里循环遍历。

解题思路

通过小学数学题环型跑道相遇问题,确定跑道是环证明快慢学生会相遇。反推,设链表有快慢两指针,他们沿着链表往下遍历,如果相遇就证明链表有环。

代码

function hasCycle (head) {
    // 如果头指针指向null,肯定不是环形链表
    if (!head) return false;

    // 设快慢指针
    let fast = slow = head;
    // 如果fast为null或指向null,说明走到链表尾了
    while(fast && fast.next) {
        fast = fast.next.next;
        slow = slow.next;
        // 如果相遇则,证明链表是环形链表
        if (fast === slow) return true;
    }

    return false
}