leetcode:环形链表

题目

放一只一步走1格的乌龟和一只一步走2格的兔子到链表的入口. 如果链表不是环形的, 兔子会率先碰到null节点, 反之, 则兔子和乌龟必然会相遇. 设环入口前面的节点数是m, 环长是n, 则乌龟和兔子相遇于时间t, 当且仅当t>m且(2t+1-m)%n=(t+1-m)%n, 这等价于t>m且t%n=0. 也就是说, 自它们第一次相遇后, 任意相邻两次相遇的时间间隔即为n. 观测龟兔, 根据上述判断即可解决问题.

代码:

cpp 复制代码
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        if(head==nullptr) return nullptr;
        ListNode * turtle=head;
        ListNode * rabbit=head;
        int n=0;
        while(true)
        {
            turtle = turtle->next;
            if(rabbit->next!=nullptr) rabbit = rabbit->next;
            else return nullptr;
            if(rabbit->next!=nullptr) rabbit = rabbit->next ; 
            else return nullptr;
            if(turtle==rabbit) break;
        }
        while(true)
        {
            turtle = turtle->next;
            rabbit = rabbit->next->next;
            n++;
            if(turtle==rabbit) break;
        }
        ListNode * turtle1=head;
        ListNode * turtle2=head;
        for(int i=0; ; i++)
        {
            turtle1=turtle1->next;
            if(i>=n) turtle2=turtle2->next;
            if(turtle1==turtle2) break;
        }
        return turtle1;
    }
};
相关推荐
GuWenyue21 分钟前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
我叫洋洋2 小时前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx3 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
战族狼魂6 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一6 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH6 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱7 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
香辣牛肉饭7 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
旖-旎8 小时前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题