力扣-142.环形链表II

题目描述

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

不允许修改 链表。

cpp 复制代码
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode *fast = head;
        ListNode *slow = head;
        while (fast) {
            slow = slow->next;
            if(fast->next){
                fast = fast->next->next;
            }else{
                return nullptr;	//处理边界值
            }
            if (fast == slow) {
                break;
            }
        }
        if(fast!=slow)
            return nullptr;
        fast = head;
        while (fast != slow) {
            fast = fast->next;
            slow = slow->next;
        }
        return slow;
    }
};

小结:这道题在上一道题的基础上,不仅要判断是否有环,还要返回入环结点

a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c)根据图示推导出这个公式,之后让快指针回到起点,并和慢指针以同样的速度移动,会发现快指针走距离a的时候,慢指针正好走距离c+(n-1)圈,即快慢指针在入环点相遇。需要注意的是本题有一个边界样例,只有一个结点且没有环,需要额外判断一下。

相关推荐
智驱力人工智能15 分钟前
高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
人工智能·算法·安全·重构·边缘计算·高密爆炸·高密化工厂
海码00728 分钟前
【Hot 100】70. 爬楼梯
数据结构·c++·算法·leetcode·动态规划·hot100
Orz_Sponge_Bob36 分钟前
6月2日上午思维训练题解
算法
YGGP41 分钟前
动态规划之网格图模型(二)
算法·动态规划
Matlab仿真实验室3 小时前
基于Matlab实现LDA算法
开发语言·算法·matlab
@蓝莓果粒茶3 小时前
LeetCode第244题_最短单词距离II
c++·笔记·学习·算法·leetcode·职场和发展·c#
宋一诺334 小时前
机器学习——随机森林算法
算法·随机森林·机器学习
无聊的小坏坏4 小时前
二分查找的边界艺术:LeetCode 34 题深度解析
算法·leetcode
CHNLee玉米4 小时前
题目解析 1.找单独的数 | 豆包MarsCode AI刷题
算法