LeetCode 142.环形链表2 C写法

LeetCOde 142.环形链表2 C写法

image-20240713164828368

思路1🤔:

​ 用环形链表的方法,快慢指针找到slow和fast的相遇点,此时头到入口点的位置相遇点到入口点距离一样

​ 我们假设头到入口点的长度为L,环的长度为C,相遇点到入口点的长度为X。那么我们可以计算出在相遇时,fast走了L+n*C+X步(其中n为fast走的圈数),slow走了L+X步,且fast步数是slow的两倍,进一步得出等式 2(L+X) = L+n*C+X,化简后得到L = n*C -X,然而n无论走多少圈,最后还是在相遇点,所以可以把n看做1,最后得L = C - XC-X就是相遇点到入口点的长度,等式成立,推出该方法。

image-20240713171335568

代码🔎:

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* slow = head;struct ListNode* fast = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(slow == fast) //带环则开始找入口点{struct ListNode* meet = slow;while(meet != head) //meet等于head时代表找到入口点{meet = meet->next;head = head->next;}return meet;}}return NULL;
}

image-20240713171718872

思路2🤔:

​ 在相遇点用一个指针meet等于slow,meet再找到meet的next,然后将slow->next指向空,那么下一次循环的时候就会在空结点停下,将环形链表变为相交链表。

image-20240713173339858

代码🔎:

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* slow = head;struct ListNode* fast = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(slow == fast){struct ListNode* meet = slow;meet = meet->next; slow->next = NULL; //断环struct ListNode* List1 = head;struct ListNode* List2 = meet;int LenHead = 1;int LenMeet = 1;int gap = 0;while(List1->next) //计算走到尾需要多少步{++LenHead;List1 = List1->next;}while(List2->next){++LenMeet;List2 = List2->next;}if(List1 == List2) //这里可以不写,因为有相遇点必定是相交链表{struct ListNode* shortList = head; //先假设头结点到入口点的长度更短struct ListNode* longList = meet;gap = abs(LenHead-LenMeet); //更长的的先走gap步if(LenHead > LenMeet) //如果假设错了就交换{shortList = meet;longList = head;}while(gap--) //让长短链表距离相等{longList = longList->next;}while(longList != shortList) //相等就说明找到入口点{longList = longList->next;shortList = shortList->next;}return longList;}}}return NULL;
}

image-20240713175013987

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

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

相关文章

Rust 测试的组织结构

测试的组织结构 本章一开始就提到,测试是一个复杂的概念,而且不同的开发者也采用不同的技术和组织。Rust 社区倾向于根据测试的两个主要分类来考虑问题:单元测试(unit tests)与 集成测试(integration test…

负荷预测 | Matlab基于Transformer-LSTM多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于Transformer-LSTM多变量时间序列多步预测; 2.多变量时间序列数据集(负荷数据集),采用前96*2个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&#x…

记一次饱经挫折的阿里云ROS部署经历

前言 最近在参加的几个项目测评里,我发现**“一键部署”这功能真心好用,省下了不少宝贵时间和力气,再加上看到阿里云现在有个开源上云**的活动。趁着这波热潮,今天就聊聊怎么从头开始,一步步搞定阿里云的资源编排服务…

【持续集成_06课_Jenkins高级pipeline应用】

一、创建项目选择pipeline的风格 它主要是以脚本(它自己的语言)的方式进行运行,一般由运维去做的事情,作为测试而言。了解即可。 --- 体现形式全部通过脚本去实现:执行之前(拉取代码)执行&…

Linux:Linux网络总结(附下载链接)

文章目录 下载链接网络问题综合问题访问一个网页的全过程?WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别?HTTPS解决了HTTP的哪些问题?HTTPS如何解决的?HTTPS是如何…

# Redis 入门到精通(二)通用指令

Redis 入门到精通(二)通用指令 一、redis 通用指令-key 基本操作 1、key 特征 key是一个字符串,通过key获取redis中保存的数据。 2、key 应该设计哪些操作? 对于 key 自身状态的相关操作,例如:删除,判定存在&…

企业网络实验(vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP

文章目录 需求实验修改dhcp虚拟机配置文件测试PC获取IP查看user-bind 需求 (vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP 实验 前期配置: https://blog.csdn.net/xzzteach/article/details/140406092 后续配置均在以上配置的前…

keepalive和haproxy

1、keepalive 1.1概念 调度器的高可用 vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器 在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器 1、配优先级 …

【RabbitMQ】一文详解消息可靠性

目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App,想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料,现在把我查询的结果记录下,方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日,我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接,我当时快速看了一…

shell脚本之if/case语句

一、条件测试 1、1 返回码 $? $? :返回码,用来判断命令或者脚本是否执行成功。 0 :表示true ,成功;非0 则表示flase ,失败。 1、2 test命令 可以进行条件测试,然后根据返回值来判断条件是否成立 -e…

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

4、linux相关基础知识

1、gcc编译过程 .c通过编译生成.o文件,.out目标文件进过链接生成.so库文件。 2、在C中可以使用system(("mkdir -p "path).c_str())创建目录。c_str()把string转化为c字符串,便于system命令识别,system命令会新启动一个进程来创建文…

移动硬盘有盘符打不开:深度解析与高效恢复指南

在数字化信息爆炸的今天,移动硬盘作为便捷的数据存储与传输工具,其重要性不言而喻。然而,当您遇到移动硬盘有盘符却无法正常打开的情况时,无疑会给您的工作和生活带来不小的困扰。本文将深入探讨移动硬盘有盘符打不开的原因&#…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁,这一次抛出了“王炸”级的资产交易。 7月3日,《多肽链》获得一则足以引爆国内医疗设备行业的投资信息:被东软集团视为核心资产、掌上明珠的东软医疗,成功引入通用技术集团资本有限公司与中国国有…

BI佐罗,居然抄袭洗稿我的文章

必须曝光此博主不当行径。 4月2日这天发表的原创文章:BI报表系统建设10大坑,因为都是切身的实际项目经验总结,获得了很多人的关注。 我觉得写文章要写的是亲身、真的做过的专业的项目经验,而不是信口开河随口忽悠。 如果有些博…

Fancybox: 号称世界上最流行的灯箱脚本!这款“花盒“为什么与众不同?

今天要分享的是一个灯箱脚本库:Fancybox。最近了不起刚好用到它。这里就和大家分享下。 简介 Fancybox 是终极的 JavaScript 灯箱替代品,为多媒体显示中的优质用户体验设定了标准。支持图像、视频、地图、内联内容、iframe 和任何其他 HTML 内容。 此…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库,它可以用来处理流式数据,进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候,如果使用nn.Sequential()将几个有紧密联系的运算组成一个序列,可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential()的用法,搭建以下测试网络&…