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;
    }
};
相关推荐
秋天的怀念_David9 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院10 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng10 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~13 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py14 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing14 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客15 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法
文丑颜不良啊15 小时前
LeetCode1261~1280题目解析
java·leetcode
not coder15 小时前
一文讲通--从树到红黑树
数据结构·算法
octopus_c16 小时前
C++ 入门
开发语言·c++·算法