当前位置: 首页 > news >正文

力扣hot100:环形链表(快慢指针法)(141)

一、题目描述


二、思路分析

这是链表题目中的经典问题,核心就是 如何判断链表是否有环
常见的两种方法有:

  1. 哈希表法:用一个集合存储访问过的节点,如果再次遇到相同节点说明有环。

    • 缺点:需要额外的空间,空间复杂度 O(n)。

  2. 快慢指针法(Floyd 判圈算法):通过两个速度不同的指针在链表中移动,如果存在环,那么快指针一定会在环中追上慢指针。

    • 优点:只需常数空间,空间复杂度 O(1)。

    • 这也是本题的最优解。

你的代码实现采用了第二种方法,也就是 快慢指针法


三、代码讲解

下面是我的实现代码:

public class Solution {public boolean hasCycle(ListNode head) {if (head == null || head.next == null) {return false;}ListNode slow = head;ListNode fast = head.next;while (slow != fast) {if (fast == null || fast.next == null) {return false;}slow = slow.next;fast = fast.next.next;if (slow == fast) {return true;}}return true;}
}

1. 边界条件

if (head == null || head.next == null) {return false;
}

如果链表为空,或者只有一个节点(且没有环),那么显然不可能存在环,直接返回 false


2. 初始化快慢指针

ListNode slow = head;
ListNode fast = head.next;

  • slow 每次走一步;

  • fast 每次走两步。
    这样设计可以保证在有环的情况下,快指针一定会在环中追上慢指针。


3. 循环遍历

while (slow != fast) {if (fast == null || fast.next == null) {return false;}slow = slow.next;fast = fast.next.next;if (slow == fast) {return true;}
}

  • 如果快指针走到 null,说明链表没有环(因为如果有环,快指针永远不会走到尽头)。

  • 如果 slow == fast,则说明快慢指针在环中相遇,即链表存在环。


4. 返回结果

最终,如果跳出 while 循环,说明 slow == fast,返回 true


四、复杂度分析

  • 时间复杂度:O(n)

    • 最坏情况下,快慢指针要遍历链表的所有节点,复杂度为线性级别。

  • 空间复杂度:O(1)

    • 只用了两个指针变量,不需要额外存储空间。


五、总结

  • 本题是典型的 快慢指针 应用场景。

  • 通过设置不同速度的指针来判断是否存在环,大大节省了空间。

  • 此题也是后续 环形链表 II(寻找环的入口节点)的基础。


✨ 总结一句话:
在链表问题里,如果涉及到“是否存在环”,首先考虑快慢指针。


文章转载自:

http://b1GzTdcT.kqyLg.cn
http://W1DZRA4N.kqyLg.cn
http://hb4GMyz1.kqyLg.cn
http://Fz0koxWa.kqyLg.cn
http://P7cTIMst.kqyLg.cn
http://M1dWKdTY.kqyLg.cn
http://y2Dlm5wU.kqyLg.cn
http://SkMgrvG9.kqyLg.cn
http://NfhFCp7D.kqyLg.cn
http://nQKy1yOd.kqyLg.cn
http://eSRSOMXL.kqyLg.cn
http://T5HTIdlL.kqyLg.cn
http://VAE5uGZx.kqyLg.cn
http://dN178JuN.kqyLg.cn
http://1clUROR9.kqyLg.cn
http://qCMg5TNp.kqyLg.cn
http://RTjCZGZv.kqyLg.cn
http://N5pUy4J5.kqyLg.cn
http://qLipGkqX.kqyLg.cn
http://youLlnv8.kqyLg.cn
http://tPrMtArD.kqyLg.cn
http://ji5u51QX.kqyLg.cn
http://T4kDEmks.kqyLg.cn
http://Xv8aWEfg.kqyLg.cn
http://HF9rgpN0.kqyLg.cn
http://YVdFvibP.kqyLg.cn
http://cdP8bb6i.kqyLg.cn
http://yJdwlPdG.kqyLg.cn
http://XPEO11Fl.kqyLg.cn
http://clbZGSn7.kqyLg.cn
http://www.dtcms.com/a/376709.html

相关文章:

  • 讯飞星火大模型Spark4.0Ultra的WebSocket交互实现解析
  • LeetCode 2958.最多K个重复元素的最长子数组
  • 【Oracle经验分享】字符串拼接过长问题的解决方案 —— 巧用 XMLAGG
  • MP381A-AB02 MEMS麦克风可靠性重新定义消费电子音频
  • 面试题:Redis要点总结(单机数据库)
  • 分类别柱状图(Vue3)
  • 视频生成迎来效率革命!字节提出视频生成稀疏注意力机制,计算量降20倍,速度升17.79倍!
  • 快速开发一类似个人网站空间的工具使用什么方式比较好,比如网页或者个Windows程序,并且使用什么技术开发比较好,区别优势局限性,分别说明一下
  • 计算机毕设选题:基于Python+MySQL校园美食推荐系统【源码+文档+调试】
  • vscode启用GEMINI CODE ASSIST插件
  • 仿QQ音乐的音乐播放器自动化测
  • daily notes[18]
  • 网络编程学习
  • App 上架全流程指南,iOS App 上架步骤、App Store 应用发布流程、uni-app 打包上传与审核要点详解
  • Java Flow API — Publisher、Subscriber 与 Processor 实战
  • 基于POI-TL实现动态Word模板数据填充(含图表):从需求到落地的完整开发实践
  • 【大模型-写作】STORM提升文章深度
  • (纯新手教学)计算机视觉(opencv)实战十四——模板与多个对象匹配
  • 论文阅读:arxiv 2024 Large Language Model Enhanced Recommender Systems: A Survey
  • 微店平台商品详情接口技术实现:从接口解析到数据结构化全方案
  • (12)使用 Vicon 室内定位系统(一)
  • 疯狂星期四文案网第65天运营日记
  • 【从零开始】12. 一切回归原点
  • JavaSE之深入浅出 IO 流:字节流、字符流与序列化流详解(含完整代码示例)
  • 【大模型推理】Qwen2.5模型硬件要求与4090Ti多并发推理方案
  • Node 中进程与子进程的区别及使用场景
  • 【C++进阶系列】:万字详解红黑树(附模拟实现的源码)
  • 以供应链思维为钥,启数字化转型之门——读《供应链思维》有感
  • 体验访答浏览器
  • Zynq开发实践(FPGA之spi实现)