leetcode.环形链表问题

目录

题目1

示例

解题思路

代码实现

补充

题目2

示例

解题思路

代码实现


题目1

66360b0d1ac6496e9f4195ae0fb6a0e0.jpg

该题链接:https://leetcode.cn/problems/linked-list-cycle/description/

示例

ff1e1d3a4c744212b2a3814f99f6165f.png

cd707a3f7848435781f3138a894e2e3c.png

解题思路

     要创建两个指针一个是快指针(fast),另一个慢指针(slow)。快指针走两步慢指针走一步,让它们一起往后走,如果它们相等即存在环。

     为什么它们相等即存在环呢?

     我们先假设一个链表存在环。让fast和slow一起从起始位置走。fast肯定先进环。当slow走到环的入口处时,假设fast与slow的距离为N。fast走两步,slow走一步,这时N会变成N-1。只要它们一直走,N一定会等于零,这时候它们相遇,即存在环。

代码实现

     这里着重讲一下循环结束条件。

  • 如果没有环,因为fast走的快所以它会先遇到NULL。要另外加上fast->next这是为了防止对NULL进行解应用。
  • 如果有环直接返回即可。
typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {ListNode* slow = head,*fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast)return true;}return false;
}

补充

     为什么快指针要走两步走三步不行吗?四步呢?n步呢?这里我介绍fast走三步的情况。

     假设环的总长度为C。根据上面我介绍的如果N为奇数第一轮它们不会相遇。第二轮它们的距离是C-1,如果C-1是奇数那它们就永远就遇不到了。

总结一下:

     1、N是偶数,第一轮就追上了

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

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

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

     同时存在N是奇数且C是偶数,那就永远追不上

     让我们来证一下

     假设现在slow现在在入环口。设slow走的距离为L ,fast走的距离为L+X*C+C-N(X是fast在环里转的圈数)。

6f3f80a72536484e86433e6cd0db284f.png

     因为3slow=fast。所以3L=L+X*C+C-N。化简得2L=(X+1)C-N。

     分析:2L为偶数,将上面的不存在条件带入会发现该等式并不成立,所以走三步会遇到。

题目2

该题链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/ 

示例

解题思路

     先设个快慢指针如果存在环则它们一定会相遇,当它们相遇时设一个meet指针指向它们相遇位置,在设一个head指针指向链表头节点。让它们同时走每次走一步,当它们相等时即找到入环的节点。

     解释:假设从头结点到入环节点距离为L,入环节点到fast和slow的相遇点距离为N。

      fast走的距离L+X*C+N(X是圈数),slow走的距离L+N。因为2slow=fast得

      2(L+N)=L+X*C+N,化简得:L=(X-1)C+C-N。即L=C-N。

代码实现

typedef struct ListNode ListNode;
struct ListNode *detectCycle(struct ListNode *head) {ListNode* slow = head, *fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast){ListNode* meet = slow;while(meet != head){meet = meet->next;head = head->next;}return meet;}}return NULL;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux修改终端命令颜色

1.在家目录中修改.bashrc文件 cd ~ vim .bashrc2.找到PS1相关段落,把其他的注释掉,填上该行代码,修改为自己设置的颜色 (具体颜色查看参考文章) 提供两种颜色,其他的自学调色盘吧(下文有)~ (祝你愉快) ①浅蓝色 深蓝 PS1\[\03…

华医网在线教育系统,经过疫情,知识付费行业的机遇!

因为知识付费的行业入门门槛很低,所以产品的质量也参差不齐,因为疫情的影响,知识付费行业迎来了一波机遇。 因为知识付费门槛低,所以持续创造优质内容才是王道;现在成熟的知识付费平台和产品受到了大部分用户的喜欢&am…

WebLogic Serer的服务策略

服务策略 Oracle提供终身服务策略。以下按照服务级别,分别说明了各级别的服务期间以及服务内容。 Premier Support 服务期间 制品出荷~开始后的第5年 服务内容 提供程序的更新版提供新做成的补丁提供安全情报提供Critical Patch Update税务法律合规提供升级脚本大多数新产…

CSRF 攻击实验:Token 不存在绕过验证

前言 CSRF(Cross-Site Request Forgery),也称为XSRF,是一种安全漏洞,攻击者通过欺骗用户在受信任网站上执行非自愿的操作,以实现未经授权的请求。 CSRF攻击利用了网站对用户提交的请求缺乏充分验证和防范…

基于Java+SpringBoot+vue+elementui 实现猜灯谜答题抽奖系统

目录 系统简介效果图1、手机答题端2、后台系统管理 源码结构源码下载地址技术交流 博主介绍: 计算机科班人,全栈工程师,掌握C、C#、Java、Python、Android等主流编程语言,同时也熟练掌握mysql、oracle、sqlserver等主流数据库&…

2024年成都市首台(套)重大技术装备示范申报奖励补助、要求

一、支持市场推广应用 (一)出台市级认定管理办法。出台市级首台(套)产品认定管理办法,开展市级首台(套)产品目录征集、产品认定,并会同物价部门、研制单位、应用单位共同就首台&…

MES系统在电线电缆行业生产上的应用

MES系统在线缆行业的应用可以带来多重价值,包括提高生产效率、降低生产成本、提高产品质量、优化库存管理、改善生产环境和提高企业竞争力等方面。因此,在电线电缆行业中广泛应用MES系统可以提高企业的经济效益和社会效益,推动企业发展和行业…

封装的艺术:探索面向对象编程的核心守护神

1. 概述 封装是面向对象编程(OOP)的三大核心特性之一,它是指将对象的属性和方法结合成一个独立的单元,并将这个单元的内部实现细节隐藏起来,只对外提供公共的访问方式。封装的目标是提高代码的安全性、可维护性和复用…

第1章 初始Spring Boot【仿牛客网社区论坛项目】

第1章 初始Spring Boot【仿牛客网社区论坛项目】 前言推荐项目总结第1章初识Spring Boot,开发社区首页1.课程介绍2.搭建开发环境3.Spring入门体验IOC容器体验Bean的生命周期体验配置类体验依赖注入体验三层架构 4.SpringMVC入门配置体验响应数据体验响应Get请求体验…

【项目汇报中的 STAR 法则】项目管理必会的思维分析工具13

STAR法则是《高效培训》一书中所提出的概念,是结构化的一个重要理论,即Situation(情景)、Task(任务)、Action(行动)和Result(结果)。 1.Situation&#xff0…

绝地求生:一穿四教学,绿色玩家也能轻松一穿四

PUBG一穿四速成班开课啦!我这里只做PUBG干货分享,不搬运!不搬运!!不搬运!!! 有很多朋友是否在排位里kd不高,开局不是扎堆roll点就是一直搜东西然后一波就没?这…

更换冷冻油的知识介绍

一、 冷冻油更换的条件 1、 空调机组长时间工作,压缩机已达到保养时限(机组初次运行2000小时、之后运行累计三年或运行时间超过10000~12000小时); 2、 因电机烧毁而更换压缩机;更换压机后连续运行100小时…

机器视觉中的打光技巧、选择光源的流程

目录 基本原则选择照明的考虑因素明场照明和暗场照明全明场照明(漫射照明)技术 特定光源1. 环形光源2. 条形光源3. 同轴光源3.1 何时使用同轴照明?3.2 何时不使用同轴照明? 4. 背光源5. 远心照明6. 点光源7. 穹顶光源8. 线光源9. …

3、架构-事务处理

目录 概述 场景事例 本地事务 实现原子性和持久性 实现隔离性 概述 事务处理几乎在每一个信息系统中都会涉及,它存在的意义是为 了保证系统中所有的数据都是符合期望的,且相互关联的数据之间不 会产生矛盾,即数据状态的一致性&#xff0…

使用Git命令从本地上传到码云

最近刚接触Git和码云,想着把本地代码上传到码云上供大家借鉴,但困难的是一直没有解决如何上传的问题。仔细摸索了几天,找到了一点途径,请大家帮忙指点一二~ Gitee创建仓库内没有内容 本地: 初始化Git仓库&#xff1…

python日志解析生成excel表

需求 实时流媒体性能指标分析,提升问题定位效率 方案 日志文件读取解析:python excel表生成:xls 实现 未完待续

实现的Oxyplot.WindowsForms.Plot的放大和缩小

要实现Oxyplot.WindowsForms.Plot的放大和缩小功能,可以通过以下步骤来实现: 在窗体中添加一个Oxyplot.WindowsForms.Plot控件,并设置其属性和数据源。 添加两个按钮用于放大和缩小操作。 在按钮的Click事件中编写放大和缩小的代码。 下面…

685.冗余连接II

685.冗余连接II 题目链接:685.冗余连接II 代码如下: //并查集 //参考链接:https://leetcode.cn/problems/redundant-connection-ii/solutions/417164/685-rong-yu-lian-jie-iibing-cha-ji-de-ying-yong-xi class Solution { public:vector…

springboot用注解实现适配器模式

创建注解 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Component public interface Match {String value(); }处理 match 的工具类 import com.google.common.collect.Maps; import org.apache.commons.collections4.MapUtils; import org.sp…

鸿蒙OS开发:【Stage模型应用程序包结构】

Stage模型应用程序包结构 为了让开发者能对应用程序包在不同阶段的形态更有清晰的认知,分别对开发态、编译态、发布态的应用程序结构展开介绍。 开发态包结构 在DevEco Studio上[创建一个项目工程],并尝试创建多个不同类型的Module。根据实际工程中的…