刷题挑战第三题之『判断链表是否有环』| 刷题打卡

193 阅读1分钟

前言

『判断链表是否有环』是一道很经典的算法题了,算法题中的easy级别,必会算法题之一。

题目描述

判断给定的链表中是否有环。如果有环则返回true,否则返回false。

要求:空间复杂度O(1)

问题分析

如果链表有环,那么链表中的指针都不会指向null;还有就是如果一个指针从链表头部开始遍历,因为环状结构的属性,指针最终会停留在环内

根据以上分析可知,如果链表没有环,那么指针走到尾部会为Null;如果有环,那么如果有一快一慢两个指针同时从头部出发,那么两者最终会在环内相遇

ps: 相遇点也很特殊,根据相遇点的位置可以找到链表中环的入口(根据数学公式可以推导出来),这也是常见的算法题之一,会在下一篇文章里解析。

AC代码

function hasCycle(head) {
    // write code here
    if (head == null) return false;

    let fast = head, slow = head;
    while (fast != null && fast.next != null) {
        fast = fast.next.next;
        slow = slow.next;

        if (fast == slow) return true; 
    }
    return false;
}

总结

判断链表是否有环思路总结:如果链表有环,那么两个指针同时出发,快指针一次走两步,慢指针一次走一步,两者最终会相遇;否则快指针会走到Null

如果这篇文章对你有帮助,请点赞+关注

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情