(重温题)代码随想录算法营 -- 环形链表相遇问题单开一个blog

本文介绍了如何使用双指针解决链表相交问题,包括解题思路、特殊情况处理和关键代码解释。通过设置快慢指针,判断链表是否存在环,并找到环的起始节点。
摘要由CSDN通过智能技术生成

题目

本题自己根本解不出来 ,隔一段时间要自己重温

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交

解题思路

用双指针的第一次相遇来解:(参考k神解法)

首先有快慢指针,fast和slow 简称为 f 和 s。

- f 运动速度是s 的2倍。 f=2s(这是两个关键指针的 内在联系) 

- f 和s 目的是相遇,所以在走各自的路段以外 肯定是有相同的路段的 (这是外在联系,后面可以根据内外联系建议二元推导)

设链表有a+b个节点,然后a是头节点到相遇节点的距离, b是loop 长度(也就是f 进来以后一直循环等待s进来与其相遇的的环)

- 可以得到: f = s+nb (n是loop的循环次数,肯定是大于等于1的 因为fast指针一定会先于slow进来)

- 由 f= 2s 和  f = s+nb 可以构造另外一个等式:

   2s &#

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值