【oj题】环形链表

目录

一. OJ链接: 环形链表

【思路】 快慢指针

​编辑【扩展问题】 为什么快指针每次走两步,慢指针走一步可以解决问题?

 ​编辑【扩展问题】快指针一次走3步,走4步,...n步行吗? 

二. OJ链接:环形链表|| 


一. OJ链接: 环形链表

【思路】 快慢指针

即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) 
{ListNode* fast , *slow;fast = slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow)return true;}   return false;
}

【扩展问题】 为什么快指针每次走两步,慢指针走一步可以解决问题?

        如果链表不带环,两个指针一定不会相遇,因为fast = 2slow

        假设链表带环,两个指针最后都会进入环,快指针先进环,慢指针后进环。

        当慢指针刚进环时,可能就和快指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度-1。

        此时,两个指针每移动 一次,之间的距离就缩小一步。因此,在慢指针走到一圈之前, 快指针肯定是可以追上慢指针的,即相遇。

 【扩展问题】快指针一次走3步,走4步,...n步行吗? 

假设快指针一次走3步,慢指针一次走1步

同理可证,快指针走4,5……也行 

二. OJ链接:环形链表|| 


相遇时,slow指针与fast指针走的路程 

 head指针走L步,meet指针走C-N步,head指针和meet指针相遇,此时就是环的第一个节点

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* detectCycle(struct ListNode* head) {struct ListNode *slow = head, *fast = head;while (fast != NULL && fast->next) {slow = slow->next;fast = fast->next->next;if (fast == slow) {struct ListNode *ptr = head, *meet = slow;while (ptr != meet) {ptr = ptr->next;meet = meet->next;}return ptr;}}return NULL;
}

 一键三连~

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

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

相关文章

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题: 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本: sed -i s/old_string/new_string/g /path/to/file然而,当我在Mac OS X上尝试时,我得到: command i expects \ followed by text我以为我的Mac运行的是…

Liunx_DNS域名解析服务

目录 DNS术语 域名分层 顶级域名(Top-Level Domain, TLD) 二级域名(Second-Level Domain, SLD) 子域名(Subdomain) FQDN(Fully Qualified Domain Name) 域名分层的意义 域名…

【研发日记】Matlab/Simulink避坑指南(十二)——Initialize Function执行Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记,Matlab/Simulink避坑指南(七)——数据溢出钳位Bug》 见《研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug》 见《研发日记,Matlab/Simuli…

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔?不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等,即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦,如果您是点击删除的人,情况会…

14 华三 Telent

AI 解读 09 华三 SSH-CSDN博客 华三 Telent是华为三号电信工程有限公司的简称,是一家专门从事电信网络工程建设的公司。该公司提供电信网络规划、设计、建设、维护等一系列服务,包括有线和无线网络设备的安装和调试、网络性能优化等。华三 Telent致力于…

word转pdf的java实现(documents4j)

一、多余的话 java实现word转pdf可用的jar包不多,很多都是收费的。最近发现com.documents4j挺好用的,它支持在本机转换,也支持远程服务转换。但它依赖于微软的office。电脑需要安装office才能转换。鉴于没在linux中使用office,本…

浅谈如何自我实现一个消息队列服务器(7)——编写服务器部分

文章目录 一、编写服务器代码1.1、分析一个服务器应具备的功能1.1.1、成员变量1.1.2、对外提供的接口 一、编写服务器代码 再次拿出这张图,前面我们已经将重要概念:VirtualHost、exchange、msgQueue、message、binding 都实现了,此时就可以开…

灯珠CCD或CMOS成像RGB数据 光谱重建

1. 源由 本文主要为了通过摄像头CCD或者CMOS传感器对灯珠成像数据分析、重建灯珠可见光范围光谱数据的研究,从原理和方法上论证可行性。 随着照明技术迅猛发展,LED技术日渐成熟。LED产品由于具备经久耐用、节能且价格低等优势,已成为照明行…

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化: 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

如何打开远程桌面连接?

远程桌面连接是一项强大的功能,它允许我们远程访问其他计算机,并在远程计算机上进行操作。这对于远程办公、技术支持和远程培训等场景非常有用。本文将介绍如何在不同操作系统中打开远程桌面连接。 Windows系统 在Windows操作系统中,打开远程…

【动态规划】子数组、子串系列II|等差数列划分|最长湍流子数组|单词拆分|环绕字符串中唯一的子字符串

一、等差数列划分 413. 等差数列划分 算法原理 💡细节: 1.如果当前nums数组中i位置的数和前面两个数可以构成等差数列,那么当前位置所有子数组构成的等差数列个数dp[i]就等于前一个位置有子数组构成的等差数列个数1(这个1代表增加…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…

Java面试——MyBatis

优质博文:IT-BLOG-CN 一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。 【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每…

【C++】CentOS环境搭建-快速升级G++版本

【C】CentOS环境搭建-快速升级G版本 1. 安装CentOS的软件集仓库:2. 安装你想要的devtoolset版本,例如devtoolset-9:3. 启用新版本的编译器:4. 检查G版本: 在CentOS系统中升级G编译器通常涉及使用devtoolset或者SCL&…

为什么要学Python?学Python有什么用?

为什么要学Python?学Python有什么用? 在当今的数字化时代,编程已成为一项宝贵的技能。Python,作为一种流行的编程语言,因其易于学习和强大的功能而受到全球开发者的青睐。本文将探讨学习Python的原因和它的实际应用&am…

【组合博弈】介绍

本文为学习笔记,详细内容参考"Lessons in Play,Michael H. Albert Richard J. Nowakowski David Wolfe" 文章目录 组合博弈介绍(Combinatorial Games)DOMINEERING游戏组合游戏选手介绍Options博弈树(game tree) 组合博弈介绍(Combi…

基于SSM框架多人命题系统

采用技术 基于SSM框架多人命题系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 学生端 登录 个人中心 公告信息 试题信息 管理员 登录 个人信息…

苹果M4芯片:推动AI时代的革新力量

随着科技的飞速发展,苹果公司一直以其创新精神引领着行业潮流。其中,M4芯片的推出无疑是苹果在人工智能领域迈出的重要一步。这款专为机器学习和AI计算而设计的芯片,不仅在新款iPad Pro等消费电子产品上亮相,更是预示着苹果即将开…

【linux】vmtouch文件缓存管理工具

目录 vmtouch简介 用法 例子 统计文件或者目录在缓存中的记录 缓存文件到内存 其他类似工具 vmtouch简介 vmtouch是用c语言编写的文件缓存管理工具,适用用于所有类Unix系统。 作用: 1,查看文件系统缓存情况 2,将文件或目…

JUC下CountDownLatch详解

详细介绍 CountDownLatch是Java并发包java.util.concurrent中提供的一个同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。这个工具类基于一个计数器,计数器的初始值可以由构造函数设定。线程调用countDown()方法会将计数器减1&#x…