力扣-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)圈,即快慢指针在入环点相遇。需要注意的是本题有一个边界样例,只有一个结点且没有环,需要额外判断一下。

相关推荐
随缘而动,随遇而安2 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
IT古董2 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
Alfred king5 小时前
面试150 生命游戏
leetcode·游戏·面试·数组
水木兰亭5 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
Jess076 小时前
插入排序的简单介绍
数据结构·算法·排序算法
老一岁6 小时前
选择排序算法详解
数据结构·算法·排序算法
xindafu6 小时前
代码随想录算法训练营第四十二天|动态规划part9
算法·动态规划
xindafu6 小时前
代码随想录算法训练营第四十五天|动态规划part12
算法·动态规划
ysa0510307 小时前
Dijkstra 算法#图论
数据结构·算法·图论
一定要AK8 小时前
2025—暑期训练一
算法