当前位置: 首页 > news >正文

leetcode 142. 环形链表 II

题目链接:142. 环形链表 II
本题目是141.环形链表I的升级版,在I仅判断是否有环的基础上,需要求解入环节点。核心其实是数学推导。
仍然是快慢指针的思路,假设入环的距离是a,入环点到相遇点的距离是b,相遇回到入环的距离是c。
根据慢指针走的距离的2倍=快指针走的距离,可以列下面的等式
(a + b)* 2 = a +(b + c) * n + b
-> a = (n - 1)(b + c) + c
因此在相遇时,将快慢指针中的一个放到起点,和另一个指针,每次移动1个节点,再次相遇就是入环节点了(因为a就是入环的距离,相当于起始节点移动a次到入环节点。(n -1)(b+c)就是走了n-1次环,刚好还有c的距离,就是相遇点绕n圈之后,再走个c个节点就会回到入环点。)

上面的距离等同于要走多少个节点,例如起始节点到入环节点距离为a,代表起始节点,移动a次就到入环节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        if (head == NULL) {
            return NULL;
        }   
        ListNode *f = head, *s = head;
        while (f->next != NULL && f->next->next != NULL) {
            f = f->next->next;
            s = s->next;
            if (f == s) {
                break;
            }
        }
        if (f->next == NULL || f->next->next == NULL) {
            return NULL;
        }
        f = head;
        while (f != s) {
            f = f->next;
            s = s->next;
        }
        return f;
    }
};

相关文章:

  • STM第三天点亮LED
  • 修改nginx配置,同一台服务器部署多个前端项目
  • [C语言笔记]07、数组
  • 阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
  • 心脏扩散张量成像中的异常值检测:是剔除异常测量值还是采用稳健拟合方法?|文献速递-医学影像人工智能进展
  • 基于SpringBoot+Vue的社区物业管理平台+LW示例参考
  • 【开题报告+论文+源码】基于Javaweb的水果超市管理系统
  • 零基础使用鸿蒙NDK开发最简步骤
  • 鸿蒙版Flutter快递查询助手
  • [oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量
  • DeepSeek本地化部署(DeepSeek+olloma+Dify)
  • vmware虚拟机中Ubuntu系统磁盘扩容
  • 《Generative Adversarial Nets》-GAN:生成对抗网络,一场伪造者与鉴定师的终极博弈
  • 深度学习——同一台电脑使用ssh配置多个github账号
  • LLM - 白话向量模型和向量数据库
  • CI/CD
  • 【Qt】supervisorctl进程管理:启动、重启、环境设置
  • 求阶乘的和(信息学奥赛一本通-1091)
  • 蛋白质功能预测论文阅读记录2025(DPFunc、ProtCLIP)
  • L2-4 吉利矩阵
  • “90后”樊鑫履新乌兰察布市察右中旗副旗长人选
  • 国家统计局:一季度规模以上工业企业利润延续持续恢复态势
  • 迟来的忍者与武士:从《刺客信条:影》论多元话语的争议
  • 玉渊谭天丨“稀土管制让美国慌了”,美军工稀土储备仅够数月
  • 美银证券前董事总经理胡霁光履新,任摩根士丹利中国区副主席
  • 吉林建筑大学党委原书记崔征接受纪律审查和监察调查