当前位置:网站首页>[C题目]力扣142. 环形链表 II
[C题目]力扣142. 环形链表 II
2022-08-02 20:33:00 【GLC8866】
思路:利用快慢指针,构建等式,寻找规律。
1、创建指针slow和fast从head同时出发,slow一步走1个结点,fast一步走2个结点。
因为fast比slow快,当slow到达入环结点时,他们在环内之间的距离是每走一步就会缩短1结点,所以一定会相遇重合。
2、设head结点到入环结点需要走L个结点。
3、设环共有C个结点。
当slow入环时,fast可能在环的任意位置,此时fast如果在入环结点的前一个位置时,是slow与fast要在环内相遇,走的距离最远的情况,此时fast要追上slow需要走C-1步,slow自然也就走C-1个结点,slow一定是在环内走完一圈之前与fast相遇的。
4、设slow入环后,再走X个结点就会在meet结点处与fast相遇重合。
5、当slow从head到达入环结点时,fast已经在环内走了L个结点,fast有可能一圈都没有走完,也有可能走了好几圈,这取决于圈的大小。我们可以确定的是:fast与slow相遇时,一定在环内走了超过一圈以上的。
6、设fast与slow相遇时,已经在环内完整地走了N圈(N>=1),再算上超过整圈的部分X和未入环时的L,那么fast从head开始到与slow相遇时,总走了L+N*C+X个结点。
7、因为fast的速度时slow的两倍,所以fast走的节点数也可以用2L+2X表示。
8、构建等式:L+N*C+X==2L+2X,得到L==N*C-X。
9、创建两个指针cur1=head和cur2=meet。上一条的结论公式中,L理解为cur1走L个结点,N*C-X理解为cur2走N*C个结点再"退"X个结点,他们将会在入环结点处相遇重合。
//判断链表是否为环,如果是环,则返回快慢指针重合的结点。如果不是环,则返回NULL。
struct ListNode* JudgeLoop(struct ListNode *head)
{
struct ListNode* slow=head;
struct ListNode* fast=head;
while(fast&&fast->next)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
return fast;
}
return NULL;
}
struct ListNode *detectCycle(struct ListNode *head)
{
struct ListNode* meet=JudgeLoop(head);
//meet不为NULL,说明有环。
if(meet)
{
struct ListNode* cur1=head;
struct ListNode* cur2=meet;
while(cur1!=cur2)//每一步都走一个结点,推理可知一定会入环结点处相遇。
{
cur1=cur1->next;
cur2=cur2->next;
}
return cur1;
}
else
{
return NULL;
}
}
边栏推荐
- C# Barrier class
- 解道6-编程技术3
- ECCV 2022 | ByteTrack: 简单高效的数据关联方法
- ICLR 2022最佳论文:基于对比消歧的偏标签学习
- Jar包启动通过ClassPathResource获取不到文件路径问题
- y85.第四章 Prometheus大厂监控体系及实战 -- prometheus告警机制进阶、pushgateway和prometheus存储(十六)
- 基本语法(三)
- WPF development through practical 】 【 automatic production management platform
- Nervegrowold hands-on learning deep learning V2 - Bert pre training data set and code implementation
- Day35 LeetCode
猜你喜欢
Packages and packages, access modifiers
The time series database has been developed for 5 years. What problem does it need to solve?
Day12 接口和协议
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
框架设计:PC 端单页多页框架如何设计与落地
go——内存分配机制
【流媒体】推流与拉流简介
【SLAM】DM-VIO(ros版)安装和论文解读
Adobe官方清理工具Adobe Creative Cloud Cleaner Tool使用教程
Implement fashion_minst clothing image classification
随机推荐
How the sensor works
y85.第四章 Prometheus大厂监控体系及实战 -- prometheus告警机制进阶、pushgateway和prometheus存储(十六)
Flink Yarn Per Job - 启动AM
信息学奥赛一本通(1257:Knight Moves)
软件成分分析:华为云重磅发布开源软件治理服务
js如何获取浏览器缩放比例
Adobe官方清理工具Adobe Creative Cloud Cleaner Tool使用教程
Use the TCP protocol, we won't lost package?
.NET如何快速比较两个byte数组是否相等
ABAP grammar small review
PLC working principle animation
10 种最佳 IDE 软件 ,你更忠爱哪一个?
Xcode13.1 run engineering error fatal error: 'IFlyMSC/IFly h' file not found
OP-5,输入/输出信号范围-一信号处理能力
[21 Days Learning Challenge] Bubble Sort and Insertion Sort
用了TCP协议,就一定不会丢包吗?
基本语法(三)
Day12 接口和协议
Digital twins help visualize the construction of smart cities
C# Monitor类