LeetCode 分类刷题:141. 环形链表

题目

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

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。

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

解析

前置题目:LeetCode 分类刷题:876. 链表的中间结点

同样设置快慢指针

如果链表中存在环,那么慢指针到环的入口时,快指针肯定已经入环了。因为快指针走两步的时间慢指针走一步,所以相对速度为1,则快指针一定会遇到慢指针。

如果链表中不存在环,则快指针会先遍历完链表,指向空。

答案

javascript 复制代码
var hasCycle = function(head) {
    let slow = head, fast = head; // 乌龟和兔子同时从起点出发
    while (fast && fast.next) {
        slow = slow.next; // 乌龟走一步
        fast = fast.next.next; // 兔子走两步
        if (fast === slow) { // 兔子追上乌龟(套圈),说明有环
            return true;
        }
    }
    return false; // 访问到了链表末尾,无环
};

// 作者:灵茶山艾府
// 链接:https://leetcode.cn/problems/linked-list-cycle/solutions/1999269/mei-xiang-ming-bai-yi-ge-shi-pin-jiang-t-c4sw/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

时间复杂度:O(n),其中 n 是链表的长度。

空间复杂度:O(1)

相关推荐
刘永鑫Adam1 分钟前
Nature Methods | 诸奇赟组-Scikit-bio:用于生物组学数据分析的基础Python库
人工智能·python·算法·机器学习·数据分析
hweiyu001 分钟前
查找算法:分类及特点
算法·分类
Rhys..1 分钟前
js-运算符 ||
前端·javascript·vue.js
哟哟耶耶3 分钟前
component-Echarts圆环数据展示-延长线,label,鼠标移动提示,圆环数据中心总数,信息面板
前端·javascript·echarts
youngee113 分钟前
hot100-51搜索二维矩阵
数据结构·算法·矩阵
byzh_rc8 分钟前
[模式识别-从入门到入土] 支持向量积SVM
数据库·人工智能·算法
Rhys..8 分钟前
js-三元运算符
前端·javascript·数据库
im_AMBER9 分钟前
Leetcode 86 【二分查找】在排序数组中查找元素的第一个和最后一个位置
笔记·学习·算法·leetcode
snow@li12 分钟前
前端:拖动悬浮小窗
开发语言·前端·javascript
温轻舟14 分钟前
圣诞节雪人动态效果 | HTML页面
开发语言·前端·javascript·html·css3·温轻舟·圣诞