【经典链表OJ】环形链表

一、题目要求

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

题目:OJ-环形链表

二、解题思路

  我们可以使用快慢指针来解决此问题:

  1. 定义一个快指针fast,一个慢指针low。这两个指针都指向头节点head。
  2. 开始遍历链表节点。快指针每次走两步,慢指针每次走一步。
  3. 如果链表没有环,则快指针最终会指向链表尾部,返回false。
  4. 如果链表有环,由于快指针每次比慢指针多走一步,快慢指针之间的距离在不断缩短,则快慢指针一定会相遇,此时返回true。

三、代码实现

bool hasCycle(struct ListNode *head)
{struct ListNode *low = head;struct ListNode *fast = head;while(fast && fast->next){low = low->next;fast = fast->next->next;if(low == fast)return true;}return false;
}

四、关于快慢指针步数差值的探讨

  上述解题思路中,快慢指针的步数差值为1,则快慢指针一定会相遇。那么如果它们的差值不为1呢?会不会有永远遇不到的可能性存在呢?

这里假设慢指针一次走一步,快指针一次走三步,它们的差值为2

下图的时刻为,slow指针刚刚进入环,fast指针已经走了x圈。

  • 如果N是偶数,那么fast和slow一定会相遇
  • 如果N是奇数,那么fast会刚好越过slow一个位置,它们之间的距离会变成C - 1

  • 这时需要讨论C - 1的奇偶性:
  • 如果C - 1为偶数,fast和slow一定会相遇,此时C为奇数
  • 如果C - 1为奇数,fast会刚好越过slow一个位置,它们之间的距离会变成C - 1,由于C -  1为奇数,会重新进入该情况,此时它们永远不会相遇,此时C为偶数

总结以上情况:当N为奇数C为偶数时,fast和slow永远不会相遇


现在确定了不会相遇时N和C的关系,只需要找出一个关于N和C的关系式来验证这个关系是否正确,就可以确定在该情况下是否有永远追不上的可能性。

  • slow走过的路程:L
  • fast走过的路程:L + x * C + (C - N) = 3 * L

化简如下:(把上述假设的关系带入),会发现此等式不成立,故假设不成立

  • 2L = (x + 1)C - N     (x为fast走过的完整的圈数)
  • 偶           偶           奇

所以在当slow指针一次走一步,fast指针一次走三步,它们的差值为2的情况下,它们一定会相遇。不存在永不相遇的可能性。

其他的步数差值也可用这种思路来求解,但讨论的情况会相对复杂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3226125.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024年上海市安全员C3证证考试题库及上海市安全员C3证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年上海市安全员C3证证考试题库及上海市安全员C3证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试…

ATA-M4功率放大器在充粘液管道损伤检测中的应用

实验名称:充粘液管道损伤检测 实验原理:在管道上的传感器激发一束超声能量脉冲,此脉冲沿着管道长度方向向远处传播,并充斥整个圆周方向,在导波传播过程中遇到缺陷时,入射波会在缺陷处发生反射、透射&#x…

视频怎么压缩变小?最佳视频压缩器

即使在云存储和廉价硬盘空间时代,大视频文件使用起来仍然不方便。无论是存储、发送到电子邮件帐户还是刻录到 DVD,拥有最好的免费压缩软件可以确保您快速缩小文件大小,而不必担心视频质量下降。继续阅读以探索一些顶级最佳 免费视频压缩器选项…

不同深度的埋点事件如何微妙地改变广告系列的成本

/ 作者简介 / 本篇文章来自现金贷领域市场投放大佬 亮哥 的投稿,主要分享了在广告投放过程中,不同深度的埋点事件如何微妙地改变广告系列的成本的相关经验,相信会对大家有所帮助!同时也感谢作者贡献的精彩文章。 / 前言 …

多模态大模型时代下的文档图像智能分析与处理_多模态ocr

0. 前言1. 人工智能发展历程 1.1 传统机器学习1.2 深度学习1.3 多模态大模型时代 2. CCIG 文档图像智能分析与处理论坛 2.1 文档图像智能分析与处理的重要性和挑战2.2 文档图像智能分析与处理高峰论坛2.3 走进合合信息 3. 文档图像智能分析与处理 3.1 文档图像分析与预处理3.2 …

AI副业 | AI绘画+对话,轻松涨粉变现!(附教程)

最近有一个超有趣、超简单的创作形式火了起来,那就是“AI绘画搭配对话”。不需要复杂的技巧,只需要一个形象,加上一段生动的对话,就能轻松吸引无数眼球! 首先,挑选一个可爱的形象,它可能是你心仪…

MySQL体系架构解析

1.MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle …

暑期旅游季必备,用这款客服神器应对爆棚的客流咨询

解决暑期旅游客流高峰问题 暑期是旅游高峰季节,客流量剧增,客户咨询纷至沓来。在这个时候,如何高效处理客户的咨询成为每家旅游机构和景点不可忽视的挑战。 聊天宝快捷回复助手是一款强大的工具,可帮助企业在客流高峰期快速回复客…

手撕算法拿捏八大神经网络!叫我机器学习大师

八大神经网络通常指的是在深度学习领域具有里程碑意义的八种神经网络模型或架构。这些模型在特定任务上取得了显著的性能,或者在深度学习的发展中起到了关键作用。 以下是这八大神经网络的一个简要概述及其学习建议: 多层感知器 (MLP):最基本…

苹果手机短信功能停用怎么恢复?一分钟快速解决!

在使用苹果手机的过程中,可能会遇到短信功能突然停用的情况,这可能导致你无法发送或接收短信,影响日常通讯。这个问题可能由多种原因引起,如网络设置、软件冲突或运营商问题。 短信功能停用怎么恢复?不必担心&#xf…

提供跨平台的视觉安防解决方案,满足不同场景的需求的智慧交通开源了。

智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

凌凯科技前五大客户依赖症加剧:研发费用率骤降,应收账款大增

《港湾商业观察》黄懿 6月13日,上海凌凯科技股份有限公司(下称“凌凯科技”)在港交所提交上市申请,拟于主板上市,华泰国际为其独家保荐人。 凌凯科技致力于提供小分子化合物技术和产品解决方案,专注于制药…

Windows环境+C#实现显示接口测试

代码如下: using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

WPF引入多个控件库使用

目的 设计开发时有的控件库的一部分符合我们想要的UI样式,另一部分来自另一个控件库,想把两种库的样式做一个整合在同一个控件资源上。单纯通过引用的方式会导致原有样式被覆盖。这里通过设置全局样式的方式来实现。 1.安装控件库nuget包:H…

重生奇迹mu自带四重箭加穿透的弓

1.烈风射手 烈风射手是自带四重箭加穿透的弓之一。该职业的技能树中有一个叫做“四箭连发”的技能,可以让玩家在一次攻击中发射四支箭矢,每支箭矢都带有穿透效果。 2.影魅猎人 影魅猎人也是自带四重箭加穿透的弓之一。该职业的技能树中有一个叫做“穿…

开源项目有哪些机遇与挑战

目录 1.概述 2.开源项目的发展趋势 2.1. 开源项目的发展现状 2.2. 开源社区的活跃度 2.3. 开源项目在技术创新中的作用 3.参与开源的经验分享 3.1. 选择开源项目 3.2. 理解项目结构和文档 3.3. 贡献代码 3.4. 与开源社区的合作 3.5. 学习和成长 4.开源项目的挑战 …

跑GCN收敛实验时遇到的Python环境问题

错误1: 报错提示:No module named sklearn.utils.linear_assignment_ 原因:linear_assignment 函数从0.21开始被弃用了,并且将在0.23版本中移除。 解决方法:降低scikit-learn版本(本人通过该方法解决&#…

Kimi携手思维链,点亮论文写作之路!

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在学术的海洋中,思想的火花常常在静谧的图书馆角落或深夜的电脑屏幕前迸发。今天分享的内容是一种高阶的论文写作方法:Kimi思维链。 Kimi,一个由月之…

Spark-RDD和共享变量

概览 每个Spark应用程序都由一个driver program 组成,该驱动程序运行我们编写的main函数,并在集群上执行各种 并行 操作。Spark提供的主要抽象是一个 弹性分布式数据集(RDD),它是一个跨集群节点分区的元素集合&#x…

Linux 一键部署Mysql 8.4.1 LTS

mysql 前言 MySQL 是一个基于 SQL(Structured Query Language)的数据库系统,SQL 是一种用于访问和管理数据库的标准语言。MySQL 以其高性能、稳定性和易用性而闻名,它被广泛应用于各种场景,包括: Web 应用程序:许多动态网站和内容管理系统(如 WordPress)使用 MySQL 存…