算法:判断链表是否有环

embedded/2025/3/4 0:26:59/
/*** @brief 判断链表是否有环* * 该函数使用快慢指针法来判断链表中是否存在环。* 快指针每次移动两步,慢指针每次移动一步。* 如果链表中存在环,那么快指针最终会追上慢指针;* 如果链表中不存在环,快指针会先到达链表末尾。* * @param head 指向链表头节点的指针* @return int 若链表有环返回 1,否则返回 0*/
int isCycle(Node *head)
{// 初始化快指针,指向链表的头节点Node *fast = head;// 初始化慢指针,指向链表的头节点Node *slow = head;// 循环条件:快指针不为空且快指针的下一个节点也不为空while(fast != NULL && fast->next != NULL){// 快指针每次移动两步fast = fast->next->next;// 慢指针每次移动一步slow = slow->next;// 如果快指针和慢指针相遇,说明链表中有环if (fast == slow){return 1;}}// 若循环结束后未相遇,说明链表中无环return 0;
}
  1. 快慢指针步长比例分析

    • 快指针走两步、慢指针走一步的原理
      • 假设链表存在环,环的长度为nn。设慢指针进入环时,快指针与慢指针的距离为mm(0⩽m<n0⩽m<n)。
      • 因为快指针每次比慢指针多走一步,所以每一轮循环,快指针与慢指针的距离会减少11。
      • 最终,经过mm轮循环后,快指针和慢指针必然会相遇。
    • 其他可能的步长比例
      • 例如,快指针走三步,慢指针走一步。
      • 但是这种情况下会有一些特殊情况需要考虑。假设环的长度nn和初始距离mm存在某些特定关系时,可能会出现快指针“跳过”慢指针而不相遇的情况。
      • 例如,当环长n=4n=4,初始距离m=2m=2时,快指针走三步,慢指针走一步,可能会出现快指针和慢指针一直无法相遇的情况。
    • 快指针走两步、慢指针走一步的优势
      • 这种步长比例简单且能稳定地判断链表是否有环,不会出现特殊情况导致判断错误。所以在实际应用中被广泛使用。

http://www.ppmy.cn/embedded/169748.html

相关文章

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…

Starrocks入门(二)

1、背景&#xff1a;考虑到Starrocks入门这篇文章&#xff0c;安装的是3.0.1版本的SR&#xff0c;参考&#xff1a;Starrocks入门-CSDN博客 但是官网的文档&#xff0c;没有对应3.0.x版本的资料&#xff0c;却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料&#xff0c;不要用较…

前沿科技展望未来发展趋势

大数据在医疗健康领域正在发挥重要作用。它能收集分析海量数据&#xff0c;帮助医生和患者做出更明智的选择。 首先大数据能提供个性化服务。通过分析患者的健康数据&#xff0c;比如年龄、病史、生活习惯等&#xff0c;系统可以预测患病风险&#xff0c;提醒患者注意饮食或运…

基于大数据的空气质量数据可视化分析系统

【大数据】基于大数据的空气质量数据可视化分析系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本系统的实践价值在于将大数据技术与空气质量监测相结合&#xff0c;为公众、研究机构和政府…

授权与认证之jwt(一)创建Jwt工具类

JWT的Token要经过加密才能返回给客户端&#xff0c;包括客户端上传的Tokn,后端项目需要验证核 实。于是我们需要一个WT工具类&#xff0c;用来加密Token和验证Token的有效性。 一、导入依赖 <dependency><groupId>com.auth0</groupId><artifactId>jav…

Linux——计算机网络

一.历史 网络产生 二战结束&#xff0c;世界迅速进入了美苏冷战对抗状态。1957年&#xff0c;苏联成功发射了第一颗人造卫星“sputnik”&#xff0c;震惊了整个西方世界&#xff0c;极大的刺激了美国。为了防止对美国不利的震惊技术再次出现&#xff0c;1958年&#xff0c;美…

微服务组件详解——sentinel

1.启动sentinel&#xff1a; 下载jar sentinel-dashboard-1.8.0.jar 使用以下命令直接运行 jar 包&#xff08;JDK 版本必须≥ 1.8&#xff09;&#xff1a; java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制台访问地址&#xff1a;http://localhost:9999…

深入浅出 Go 语言:协程(Goroutine)详解

深入浅出 Go 语言&#xff1a;协程(Goroutine)详解 引言 Go 语言的协程&#xff08;goroutine&#xff09;是其并发模型的核心特性之一。协程允许你轻松地编写并发代码&#xff0c;而不需要复杂的线程管理和锁机制。通过协程&#xff0c;你可以同时执行多个任务&#xff0c;并…