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

相关推荐
666HZ6666 分钟前
数据结构2.0 线性表
c语言·数据结构·算法
实心儿儿1 小时前
Linux —— 基础开发工具5
linux·运维·算法
charlie1145141912 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
清木铎3 小时前
leetcode_day4_筑基期_《绝境求生》
算法
清木铎3 小时前
leetcode_day10_筑基期_《绝境求生》
算法
j_jiajia3 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
源代码•宸3 小时前
Golang语法进阶(协程池、反射)
开发语言·经验分享·后端·算法·golang·反射·协程池
Jasmine_llq5 小时前
《CF280C Game on Tree》
数据结构·算法·邻接表·深度优先搜索(dfs)·树的遍历 + 线性累加统计
小棠师姐5 小时前
支持向量机(SVM)入门:超平面与核函数的通俗解释
算法·python机器学习·支持向量机svm·超平面可视化·核函数应用
im_AMBER6 小时前
Leetcode 102 反转链表
数据结构·c++·学习·算法·leetcode·链表