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

算法训练营第七天|142.环形链表Ⅱ

题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/

视频链接:https://www.bilibili.com/video/BV1if4y1d7ob

题目描述:

测试用例:

算法描述:

这个算法的目标是:给定一个单链表的头节点 head,找到并返回链表的中间节点。如果链表有两个中间节点,则返回第二个。
核心思想:快慢指针
这个算法的核心思想是定义两个指针,从链表的头节点同时出发:
慢指针 (slow):每次向后移动一个节点。
快指针 (head):每次向后移动两个节点。
你可以想象成两个人在跑步,一个人(快指针)的速度是另一个人(慢指针)的两倍。当跑得快的人到达终点时,跑得慢的人恰好就在路程的中间位置。
代码逻辑解析
虽然你提供的代码片段不完整,但其核心部分清晰地展示了算法的执行流程:
初始化:slow 和 head(在此处充当快指针)都从链表的头节点开始。
循环移动:在一个循环中(循环条件通常是快指针 head 及其下一个节点 head.next 不为空),两个指针同时移动。

slow = slow.next; // 慢指针走一步
head = head.next.next; // 快指针走两步
返回结果:当快指针 head 到达链表末尾时,循环结束。此时,慢指针 slow 所指向的节点就是链表的中间节点。

举例说明
奇数个节点:1 -> 2 -> 3 -> 4 -> 5
初始:slow 指向 1,head 指向 1。
第一次移动后:slow 指向 2,head 指向 3。
第二次移动后:slow 指向 3,head 指向 5。
head 无法再走两步,循环结束。slow 指向的 3 就是中间节点。
偶数个节点:1 -> 2 -> 3 -> 4 -> 5 -> 6
初始:slow 指向 1,head 指向 1。
第一次移动后:slow 指向 2,head 指向 3。
第二次移动后:slow 指向 3,head 指向 5。
第三次移动后:slow 指向 4,head 指向 null (越过了 6)。
循环结束。slow 指向的 4 就是第二个中间节点。
这种算法非常高效,只需要遍历一次链表。

时间复杂度为 O(n);

空间复杂度为 O(1);

http://www.cnnetsun.cn/news/2001247.html

相关文章:

  • 深入拆解:一块1.3寸SH1106 OLED屏里的GT20L16S1Y字库芯片是如何工作的
  • 别再混淆了!一文搞懂SM2双证书(签名/加密)与P10请求的完整关系链
  • 告别Python版本混乱!Windows 11下用pyenv-win保姆级配置指南(含Chocolatey安装)
  • Nginx配置踩坑实录:从403 Forbidden到优雅重定向,我的半天调试经历
  • Gin:自定义日志、验证器与中间件全指南
  • 别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化
  • zephyr邪修笔记(9)最简化自定义板子-定制化第一步
  • 告别VS2022!在VSCode里搞定.NET Framework 4.6项目的编译与调试(保姆级教程)
  • 别再只盯着压差了!手把手教你从PSRR、噪声到环路补偿,全面评估一颗LDO芯片
  • 深入理解传输中二层PW和三层BFD之间的关系
  • 从Cortex-M4/M7寄存器入手,聊聊中断嵌套与栈切换那些容易踩的坑
  • 3步破解百度网盘SVIP:macOS逆向工程实战指南
  • 强化学习1——初步理解PPO
  • 编码规范基础:业界通用代码风格总结
  • 别再手动改模型了!用timm库的create_model函数,5分钟搞定PyTorch迁移学习
  • 山东大学软件学院项目实训-创新实训-计科智伴(二)——个人博客(MinIO配置)
  • ST7735S Datasheet里的‘黑话’:SPI时序、0x36寄存器与Gamma曲线,一次搞懂驱动屏的那些关键配置
  • Win11Debloat终极指南:3步轻松清理Windows系统,提升50%性能
  • 终极指南:3分钟快速检测微信单向好友,轻松清理“僵尸“好友
  • K210人脸识别项目实战:如何用SD卡实现人脸特征值的断电保存与加载?
  • C# 14 AOT编译Dify客户端:为什么你的AOT二进制仍加载慢?6个被忽略的IL trimming陷阱曝光
  • 重装系统后,Android Studio老项目报CMake版本错误?三步搞定NDK路径配置(附local.properties详解)
  • 5个步骤快速掌握KMS_VL_ALL_AIO:Windows与Office批量激活终极指南
  • 【硬件知识】光模块学习
  • LeetCode 1855.下标对中的最大距离:双指针
  • Python的__getattr__在属性访问链中的递归调用问题
  • 【2026年最新600套毕设项目分享】微信小程序的电影院订票选座系统(30118)
  • 从流体力学到临床:一文搞懂FFR(血流储备分数)的计算原理与核心价值
  • 避坑指南:在Cesium中构建清晰三维管道网络,如何解决实体重叠与视觉混乱问题?
  • 汽修厂最怕你发现的秘密武器!只输个车型,汽车毛病怎么修全都有