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;
    }
};
相关推荐
徐小黑ACG2 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
Navigator_Z2 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛3 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记3 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序3 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室3 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
圣保罗的大教堂3 小时前
leetcode 301. 删除无效的括号 困难
leetcode
liliangcsdn4 小时前
派息率指标的应用探索和分析
大数据·算法
垆边人似月.4 小时前
华为机试题 :两数之和
c++·算法·华为
默默开发4 小时前
物流行业可用算法方向
算法