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

求链表环的起始位置

leetcode中题目位置

https://leetcode.cn/problems/linked-list-cycle-ii/submissions/?envType=study-plan-v2&envId=top-100-liked

代码:

public class Solution {
    public ListNode detectCycle(ListNode head) {
        if (head == null || head.next == null) {
            return null;
        }
        // a + b = slow = cnt;
        // a + b + (b + c)x = fast = 2 * slow = 2cnt ----> bx+cx = cnt
        // a = b(x-1) + cx = (b + c)(x - 1) + c, 即从 相遇节点、root节点出发,经过(a+1)节点后,他们会在头结点相遇;
        ListNode slow = head;
        ListNode fast = head.next;
        while (slow != fast) {
            if (fast.next == null || fast.next.next == null) {
                return null;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        slow = slow.next;
        while (head != slow) {
            head = head.next;
            slow = slow.next;
        }
        return head;
    }
}

重点:快慢指针相遇后,慢指针继续往前,同时root也开始往前(root.next = head), 他们必然会相遇,即a = (b + c)(x - 1) + c

* a+1是root到环起点的步数;

* c+1是慢指针从相遇节点 到 环起点的步数;

* b+c是环的节点数

原文地址:https://blog.csdn.net/sndayYU/article/details/134626461
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/145185.html

相关文章:

  • Centos 7、Debian、Ubuntu中tree指令的检查与下载
  • 机器学习【03】在本地浏览器使用远程服务器的Jupyter Notebook【conda环境】
  • gitlab各版本安装注意点:
  • Jenkins CI/CD
  • 数仓成本下降近一半,StarRocks 存算分离助力云览科技业务出海
  • JVM——几种常见的对象引用
  • 不存在类型变量 A, T 的实例,使 Collector<T, A, List<T>> 符合 Supplier<R>
  • 从零开始搭建博客网站-----构建项目
  • 探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示
  • 【深度学习】如何选择神经网络的超参数
  • 排查生产环境:MySQLTransactionRollbackException数据库死锁
  • Meta最新视频生成工具:emu video技术报告解读
  • HarmonyOS应用开发者高级认证【题库答案】
  • 使用Java编写串口程序
  • Linux服务器SSH客户端断开后保持程序继续运行的方法
  • 【图像加密】Arnold置乱和混沌加密-MATLAB代码
  • 2分钟快速实现非逻辑卷磁盘扩容
  • Ubuntu 22.04安装vscode
  • Atlassian午餐会直播回顾:如何拓展Jira工作流,加强团队协作?
  • python基础 — 可迭代对象,迭代器和生成器