LeetCode142 Linked List Cycle II

LeetCode142——环形链表II 我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/description/ 题目描述: 知识点:哈希表、双指针、链表 思路一:用一个hashSet来存储已经遍历过的节点 本题是LeetCode141——环形链表的加... 阅读详情
题目链接:

https://leetcode.com/problems/linked-list-cycle-ii/

题目描述:

给一个链表,如果有环,找到环开始位置的节点。如果没有环,返回null。

题目分析:

之前也有个题,是判断链表是否有环。这个题也相当于包含那道题了,就写一篇博客算了。
这里写图片描述

让一个指针low步长为1,另一个指针high步长为2,如果链表存在环,它们一定会相遇,碰撞点collisionPoint,假设为图中Z点,环的周长为r,X到Y为链表头结点到环开始点的距离a,开始点Y到碰撞点Z的距离为x,那么从碰撞点到开始点Y的距离为r-x。

假设low指针走的路程为s=a+x,那么high指针走的路程为2s=a+x+nr。
联立解得a+x=nr =>a=(n-1)r+r-x。 所以链表头指针到开始点的距离=碰撞点到开始点的距离。
我想的是让两个指针步长为1,一个指针从头结点开始走,一个指针从碰撞点开始走,当它们相遇的时候,即为开始点节点位置处。
按照这个思路,然后我就提交了,万万没想到a=0的情况,即使链表就是一个环,如果是这样的话,头节点就是开始点,碰撞点也就是开始点,即为头结点=开始点=碰撞点(把慢指针看成静止,快指针就相当于是一步一步走,快慢指针相遇就是开始处)。

本来这样也是没有问题的,但是中间我的代码有点问题。

if(collisionPoint){
            ListNode* ptr1=head;
            ListNode* ptr2=collisionPoint;
            while(1){
                ptr1=ptr1->next;
                ptr2=ptr2->next;
                if(ptr1==ptr2){
                    return ptr1;
                }
            }
        }

如果先让两指针走了,再判断,那么答案就会出错。

因为ptr1,ptr2从一开始就相同,同步走相同步数,还是相同哒。所以本应该是0处,我让ptr1,ptr2先走了一次再判断,那么它们相等的位置就变成1。

这里写图片描述

代码:
class Solution {
public:
    ListNode *findCollisionPoint(ListNode* head){
        if(head==NULL || head->next==NULL){
            return NULL;
        }
        ListNode* low=head;
        ListNode* high=head;
        while(high->next!=NULL && high->next->next!=NULL){
            low=low->next;
            high=high->next->next;
            if(low==high){
                return low;
            }
        }
        return NULL;
    }
    ListNode *detectCycle(ListNode *head) {
        ListNode* collision=findCollisionPoint(head);
        if(collision==NULL){
            return NULL;
        }
        ListNode* ptr1=head;
        ListNode* ptr2=collision;
        while(1){
            if(ptr1==ptr2){
                return ptr1;
            }
            ptr1=ptr1->next;
            ptr2=ptr2->next;
        }
    }
Ubuntu20.04实时内核补丁PREEMPT_RT编译与安装全流程解析 本文详细解析了在Ubuntu20.04系统上编译与安装实时内核补丁PREEMPT_RT的全流程。从内核与补丁版本匹配、编译环境准备,到内核配置、编译排错,再到最终安装、验证与进阶优化,提供了手把手的实战指南,旨在帮助机器人、工业控制等对实时性有苛刻要求的开发者构建低延迟、高确定性的Linux系统。 阅读详情

相关推荐

电力-平衡式IEC 60870-5-101规约报文解析

本文详细介绍了电力自动化中平衡式IEC 60870-5-101规约的应用,包括链路建立与初始化、对时、遥控操作、数据上送和总召唤等关键步骤,通过实例解析了报文格式和交互过程,是理解配网自动化通信的重要参考资料。

让你爱上电路设计 5683

Leetcode第142题—环形链表Ⅱ

LeetCode第142题—环形链表Ⅱ、数据结构、java

Green_756的博客 716

Pika Labs vs Runway ML:零基础小白如何选择最适合自己的AI视频生成工具?

本文详细对比了Pika Labs和Runway ML两款AI视频生成工具,从操作界面、生成效果、隐藏成本、工作流适配性和未来兼容性五个维度进行分析。Pika Labs适合零基础用户快速生成社交媒体短内容,而Runway ML则更适合专业级视频制作。帮助用户根据自身需求选择最适合的AI视频生成工具。

wood5的博客 599

Leetcode 142-环形链表 II

题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 题解 题解转载自Krahets 算法流程:(双指针法) 双指针第一次相遇: 设两指针 fast,slow 指向链表头部 hea

Helene1996的博客 265

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1219

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 455

力扣第142题.环形链表II

142. 环形链表 II题目题解一:快慢指针题解二:哈希表 题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 不允许修改 链表。 示例 1: 输入:hea

m0_51456787的博客 1217

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9945

力扣Leetcode142:环形链表 ||(看完你就会懂的思路)

原题链接: 环形链表 ||. 难道:中等 题目: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 示例1: 思路:根据上个题目的博客讲解我们便可以判断链表是否带环,并且找到它们相遇

sjp11的博客 580

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

学无止境、积少成多、厚积薄发 3983

EndNote导入文献出现带有大括号{}乱码的解决办法

进入word中的Endnote工具栏——Bibliography Preferences(位于Bibliography区块的右下角),就是那个输入杂志名的小三角形,在Temporary citation delimiters处修改变量的默认符号。将默认的大括号{}修改为文章中不回使用到的符号。原因:因为Endnote插入的参考文献在Word中的代码就是以大括号隔开的,当文章中出现了该符号,endnote就会自动比对Library中的书目,而此时endnote出现错误。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4万+

Leetcode142. Linked List Cycle II

判断链表是否有环,并把环的入口点找到

magic_jiayu的博客 344

245. 项目195:简易文字冒险游戏——《跟老吕学Python·新手》

如果您在学习本专栏教程时遇到任何问题,或有任何技术交流的意愿,欢迎在文章评论区留言,或通过优快云私信与老吕取得联系。老吕将及时回复您的留言,并与您共同探讨,以期为大家提供更为精准和有效的帮助。老吕珍视每一位读者的反馈和支持,期待与您共同学习、共同进步,共同创造美好的未来!我们的目标是不仅教会您Python语言,更是培养您解决问题的思维方式。请随意翻阅,按照自己的节奏学习,让这本专栏成为您编程旅程中的可靠伙伴。开发一个简易的文字冒险游戏,通过文本描述场景和事件,让玩家通过选择不同的选项来推动故事发展。

Python老吕的博客 711

[Leetcode力扣 142] Linked List Cycle II

一、题目描述 给一个链表,如果里面有环,输出环的起点,否则输出空指针 二、解法一:判断节点对应的指针是否出现过 这是最容易想到的解法,因为一个节点的地址可以唯一确定这个节点,只要沿着链表移动,看节点对应的地址是否出现过就行了,unordered_set比set查找快一点,所以可以用unordered_set。代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * Li

NiuYutao的博客 308

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode 142 Linked List Cycle II

Leetcode 142 Linked List Cycle II Given a linked list, return the node where the cycle begins. If there is no cycle, return null. To represent a cycle in the given linked list, we use an integer pos w...

博学 笃志 切问 近思 267

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NYUer | LeetCode142 Linked List Cycle II

NYUer | LeetCode142 Linked List Cycle II

Moses_SU的博客 244

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode 142. Linked List Cycle II(环形链表II) -- c语言

142. Linked List Cycle II Given a linked list, return the node where the cycle begins. If there is no cycle, return null. To represent a cycle in the given linked list, we use an integer pos which rep...

d_benhua的博客 427

LeetCode-142. Linked List Cycle II [C++][Java]

Given theheadof a linked list, returnthe node where the cycle begins. If there is no cycle, returnnull.

贫道绝缘子的博客 267

LeetCode 142 Linked List Cycle II

142 Linked List Cycle II https://leetcode.com/problems/linked-list-cycle-ii/ Given a linked list, return the node where the cycle begins. If there is no cycle, return null. There is a cycle in a linked list if there is some node in the list that can be rea

cyberickk blog 221

【leetcode-Python】-快慢指针-142. Linked List Cycle II

题目链接 https://leetcode.com/problems/linked-list-cycle-ii/ 题目描述 给定一个链表,如果链表中有环,返回链表中环的起始位置。如果没有环则返回null。 示例 给定链表: 输出:1(索引为1的节点为环的起点) 解题思路 首先我们通过【leetcode-Python】-快慢指针-141. Linked List Cycle判断链表中是否有环,fast指针一次走两步,slow指针一次走一步,如果发现fast指针和slow指针相遇则跳出.

gulaixiangjuejue的博客 350

[LeetCode][142] Linked List Cycle II

[LeetCode][142] Linked List Cycle II lower 和faster 如果有重合就说明有环 当有环时候 头节点到入口点为L1 入口点到会合点是L2 循环长度为c 第一次快慢指针相遇是进行了n轮的循环 lower长度是L1+L2 faster长度是L1+L2+nc 由此第二次遇到后可以求出c 因为faster每次走两步 lower每次走一步 因此 (L1+L2 )2=...

OCEANtroye的博客 253

LeetCode 142. Linked List Cycle II 题解

本题是链表的经典问题,主要考察对链表操作和双指针技巧的理解和应用。通过使用快慢指针,我们可以不仅检测链表中是否存在环,还可以找到环的入口。双指针的核心思想是:通过让快指针以两倍的速度移动,当链表中存在环时,快指针最终会追上慢指针。然后将其中一个指针重置到链表头部,以相同的速度移动两个指针,它们再次相遇的点就是环的入口。这种方法不仅适用于环形链表 II 问题,还可以应用于许多其他链表相关的问题,例如相交链表、链表中点查找等。掌握双指针技巧,对于解决链表问题非常重要。

cannonjinx的博客 4108

LeetCode 142 Linked List Cycle II 题解

LeetCode 142 Linked List Cycle II题意思路代码 题意 判断给出的链表中是否包含环,如果有的话返回环的起始点,否则返回null。如下环起始位置为c a->b->c->d ↑ ↓ f<-e 思路 双指针一个一次一步,一个一次两步可以进入环中,但问题在于如何找到环的起始位置,下面是从讨论版找到的图,可以参考一下: 代码...

EricJeffrey的博客 294

LeetCode 142. Linked List Cycle II

LeetCode 142. Linked List Cycle II 142.Linked List Cycle II Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. To represe...

豆子 155
上一篇: LeetCode92 Reverse Linked List II
下一篇: LeetCode2 Add Two Numbers
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值