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

17zwd一起做网站百度地图怎么看沿途服务区

17zwd一起做网站,百度地图怎么看沿途服务区,网球新闻最新消息,人力资源服务外包面试必刷:判断链表是否有环(龟兔赛跑法,附记忆口诀) 判断链表是否存在环是算法面试的高频题,也是考察指针操作的经典问题。本文将用最通俗易懂的「龟兔赛跑」场景,帮你5分钟记住核心解法,面试时…

面试必刷:判断链表是否有环(龟兔赛跑法,附记忆口诀)

判断链表是否存在环是算法面试的高频题,也是考察指针操作的经典问题。本文将用最通俗易懂的「龟兔赛跑」场景,帮你5分钟记住核心解法,面试时直接默写代码!

一、问题描述:什么是链表环?

链表是由节点通过next指针连接而成的数据结构。如果链表的末尾节点指向了链表中的某个中间节点(形成一个循环),则称这个链表存在环。

例如:

1 → 2 → 3 → 4  ↑     ↓  ←-----←  

节点4的next指针指向了节点2,形成一个环。

二、核心解法:龟兔赛跑算法(Floyd判圈算法)

判断链表环最经典的方法是「快慢指针法」,也叫「龟兔赛跑法」。其核心思想是:

  • 慢指针(乌龟):每次移动1步
  • 快指针(兔子):每次移动2步

如果链表存在环,兔子会先进入环并在环内绕圈,最终追上乌龟(与乌龟相遇);如果链表无环,兔子会先到达链表末尾(遇到null)。

场景联想:龟兔赛跑

想象链表是一条跑道:

  1. 初始状态:乌龟和兔子都从起点(head)出发。
  2. 比赛规则
    • 乌龟每次走1步(slow = slow.next
    • 兔子每次跳2步(fast = fast.next.next
  3. 终止条件
    • 如果有环:兔子会绕回环内,追上乌龟(slow == fast
    • 如果无环:兔子会先到达终点(fast == nullfast.next == null

代码实现(Java)

public boolean hasCycle(ListNode head) {// 处理空链表if (head == null) return false;// 龟兔同起点ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null) {slow = slow.next;      // 乌龟走一步fast = fast.next.next; // 兔子跳两步if (slow == fast) {    // 兔子追上乌龟,有环return true;}}// 兔子到达终点,无环return false;
}

三、记忆口诀:「龟兔同起点,兔跳两步赶;遇空无环套,相遇环出现」

  1. 龟兔同起点slowfast都初始化为head
  2. 兔跳两步赶:循环中兔子每次跳两步,乌龟走一步
  3. 遇空无环套:如果兔子遇到null,说明无环
  4. 相遇环出现:如果兔子追上乌龟,说明有环

四、关键细节解析

  1. 为什么初始时龟兔都指向head?

    • 起点相同才能保证在环内相遇。如果兔子提前出发,可能会错过与乌龟的相遇点。
  2. 循环条件为什么是fast != null && fast.next != null

    • 确保兔子每次能跳两步。如果fastfast.nextnull,说明链表无环。
  3. 为什么相遇就说明有环?

    • 兔子速度是乌龟的两倍。如果有环,兔子会先进入环并绕圈,最终从后面追上乌龟。

五、复杂度分析

  • 时间复杂度:O(n)

    • 无环时,兔子最多遍历n个节点
    • 有环时,乌龟和兔子的相对速度为1,最多需要n步相遇
  • 空间复杂度:O(1)

    • 只使用了两个指针变量,无需额外空间

六、面试临场技巧

  1. 画图演示:面试时边写代码边画图,用箭头表示指针移动,清晰展示相遇过程。
  2. 强调边界:特别说明空链表和单节点链表的处理逻辑。
  3. 变体问题:如果面试官问「如何找到环的入口节点?」,可以回答:

    当快慢指针相遇后,将其中一个指针重置到head,然后两指针以相同速度移动,再次相遇的节点即为环的入口。(原理涉及数学推导,此处不展开)

总结

判断链表环的「龟兔赛跑法」是面试必背技巧,记住口诀和场景,代码可以直接默写。这个算法不仅高效,还能延伸到其他链表问题(如找环入口、链表中点等)。面试前用示例链表手动模拟一次,确保万无一失!

http://www.dtcms.com/a/431035.html

相关文章:

  • 语义场理论中的5个关键概念
  • 如何自己建立网站前端自己做博客网站
  • 812. 最大三角形面积
  • 【开题答辩全过程】以 springboot药店同城配送系统为例,包含答辩的问题和答案
  • 淘小说APP(免费阅读海量小说)
  • 自动化测试系列之pytest<一>
  • 上海自建站招聘网络营销的含义和特点
  • 闵行建设机械网站游戏开发指南
  • 30.响应式联系信息板块,采用 HTML 和 CSS | CSS 新形态设计
  • 高端营销网站建设新出的网络游戏排行榜
  • 湘潭房产网站建设wordpress自定义栏目是什么
  • iBizModel 实体界面行为(PSDEUIACTION)及实体界面行为组(PSDEUAGROUP)模型详解
  • InfiniBand 技术解析(3):解码 IB “黑话”—— 核心术语与架构概览
  • Node.js面试题及详细答案120题(101-110) -- 安全与部署篇
  • 主打社交应用,OpenAI发布视频生成模型Sora2,开启全新互动体验
  • SpringBoot对比FastAPI,优势与劣势
  • 八座立和气垫船:破解复杂地形救援难题的“黄金力量“
  • 高端「寺庙管理软件」的标志是什么?
  • 哈尔滨快速建站服务搜索引擎案例分析结论
  • C#基础02-Net框架
  • 淘宝网站开发店铺什么类别淄博网站制作服务推广
  • io多路复用:reactor模型的封装及与上层简单业务的实现(webserver)
  • Pod 的 init Containers
  • 个人网站备案 导航单位门户网站怎么做
  • 网站建设充值入口pc营销型网站
  • ML4T - 第7章第6节 使用Alphalens进行分析 Alphalens Analysis
  • Lazarus下载和安装教程(附安装包,图文并茂)
  • 高端自适应网站设计深圳市年年卡网络科技公司是什么
  • 安卓基础组件017--ImageView组件
  • wordpress 设置多域名 一个站点wordpress个人主页主题