C语言--带环链表问题

news/2024/10/18 20:19:33/

                              继续学习

一、判断链表是否带环

141. 环形链表 - 力扣(LeetCode)

思路:用快慢指针,快指针走两步,慢指针走一步,当慢指针走一半快指针进到环里

           当慢指针进环,快指针已经在环中转了一会儿了

      | |     

当慢指针进环,快指针就开始追击, 快指针如果追上慢指针就带环

如果不带环,慢指针走一半,快指针就走完了

代码如下

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

二、拓展

2.1、为什么一定会相遇,有没有可能会错过?

2.2.slow一次走一步,fast一次走3步,4步,5步,N步行不行?

这里我已fast走三步为例,当slow进环的时候,fast已经在环中转了一会儿了,还是追击问题


我们假设当slow指针刚进入环的时候与fast指针相差N步,由于此次fast指针每次走3步,也就意味着fast相对于slow的速度是2,就是说fast每走一次与slow的差距就会减少两步

会出现上述的两种情况,

第一种情况:fast与slow最终相差0步,证明fast与slow可以相遇。

第二种情况:最终fast与slow相差-1步,就是说fast反超slow了,此时进入到新一轮的追击问题了,他们相差的步数为(假设圆圈的周长为C)C-1

如果C是一个奇数那么C-1就为偶数,那么最终fast就会与slow相遇。
如果C是一个偶数那么C-1就为奇数,就会导致fast永远不会与slow相遇,是一个死循环

总结:1、N是偶数,第一轮就追上

           2、N是奇数,第一轮就会错过,距离变成C-1

                a、如果C-1是偶数,下一轮就追上

                b、如果C-1是奇数,那么永远追不上

2.3 永远追不上的条件存在吗?

结论:一定能追上,N是偶数第一轮就追上,N是奇数第一轮追不上,C-1是偶数第二轮就能  追上

看到这里是不是有一部分小伙伴就要迷茫了,上面不是说追不上了吗,怎么有追上了,那么从数学方面分析是不是会简单一些呢?

可以将(N是奇数时,C也是奇数N是偶数时,C也是偶数)带入到2.2的图中去反证


本篇到此结束,可以自己下去画一画,想一想,如有问题欢迎在评论区指正。

                                                     


http://www.ppmy.cn/news/1454099.html

相关文章

子比主题小黑屋列表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤1.引入库前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文…

【2024最新华为OD-C卷试题汇总】停车场车位统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 前…

组合API与响应性

响应性 什么是响应性 响应性是一种允许我们以声明式的方式去适应变化的一种编程范例。 Vue.js如何追踪数据的变化呢? 在生成Vue.js实例时,使用带有getter和setter的处理程序遍历传入的data,将其所有property转换为Proxy对象。 Proxy代理对象…

C++之模板

1、概述 模板是一个非常强大的功能。C STL的各种组件也是基于模板实现的(vector、map、string等)。 模板主要分为:函数模型和类模板。 2、函数重载 示例:使用函数重载,对两个相同类型的数值进行和运算(flo…

软考网络工程师 第六章 第三部分 第一节 TCP/UDP报文格式

传输层TCP vs UDP TCP报文格式 TCP伪首部 TCP伪首部本质是IP头的一部分,包含源目IP地址,协议号、TCP报头和用户数据,主要用于TCP校验和计算 UDP报文格式 与TCP相比,做了很大精简,省略诸多控制字段 例题: …

一种算法分类方式及其应用

在计算机科学领域,算法是解决问题的有效方法,而对算法进行分类有助于理解它们的特性、优劣以及在不同场景下的应用。常见的算法分类方法,包括按设计思想、问题类型、数据结构和应用领域等,每一类算法会对应有其典型和实际应用。 算…

万界星空科技商业开源MES+项目合作+商业开源低代码平台

今天我想和大家分享的是一套商业开源的 MES制造执行管理系统带源码。对于制造业而言,MES 是一个至关重要的系统,它可以帮助企业提高生产效率、优化资源利用、提高产品质量,从而增强市场竞争力。 什么是 MES? MES 是指通过计算机技…

Docker-Compose编排lnmp(dockerfile) 完成Wordpress

目录 一、创建nginx镜像 二、创建mysql镜像 三、创建php镜像 四、启动wordpress 五、安装Compose 六、准备环境 ​编辑 七、编写docker-compose.yml 八、启动并运行 九、浏览器访问 一、创建nginx镜像 #基于基础镜像 FROM centos:7 #用户信息 MAINTAINER this is ngi…