​LeetCode解法汇总142. 环形链表 II

news2024/7/2 4:01:18

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:

力扣


描述:

给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

提示:

  • 链表中节点的数目范围在范围 [0, 104] 内
  • -105 <= Node.val <= 105
  • pos 的值为 -1 或者链表中的一个有效索引

进阶:你是否可以使用 O(1) 空间解决此题?

解题思路:

/**

* 142. 环形链表 II

* 解题思路:

* 快慢指针。

* 所以如果有环,那么快慢指针一定会相遇,否则快指针走到nullptr时,代表没有环。

* 如果相遇,快指针的速度一定是慢指针的两倍。我们把开始节点距离第一个环节点的长度设置为a,第一个环节点到相遇点设置为b,环长度-相遇点的长度设置为c。

* 则a+b=n(b+c),转换一下,a=(n-1)(b+c)+c。所以,起点距离第一个环节点的长度,就是走N个环+c的长度。

* 因此,相遇时,设置一个指针从头开始走a长度,慢指针继续走,两者的第一次相遇,就是a=(n-1)(b+c)+c。

*/

代码:

 ListNode *detectCycle(ListNode *head)
    {
        ListNode *fast = head;
        ListNode *slow = head;

        while (fast != nullptr)
        {
            slow = slow->next;
            fast = fast->next;
            if (fast == nullptr)
            {
                return nullptr;
            }
            fast = fast->next;
            if (fast == slow)
            {
                break;
            }
        }
        if (fast == nullptr)
        {
            return nullptr;
        }
        ListNode *ptr = head;
        while (slow != ptr)
        {
            slow = slow->next;
            ptr = ptr->next;
        }
        return ptr;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssl单向证书和双向证书校验测试及搭建流程

零、前提准备 说明&#xff1a; 50.50.1.118作为服务端&#xff0c;系统是 linux&#xff0c;openssl版本是&#xff1a;OpenSSL 1.1.1f 31 Mar 2020。 50.50.1.116是客户端&#xff0c;系统是Windows&#xff0c;openssl版本是&#xff1a;OpenSSL 3.0.5 5 Jul 2022 (Library…

Day07-作业(MySQL查询设计)

作业1: 根据如下需求完成SQL语句的编写 【仔细阅读题目需求】 数据准备&#xff1a; 创建一个数据库 db02_homework 执行如下SQL语句&#xff0c;准备测试数据 -- 员工管理(带约束) create table tb_emp (id int unsigned primary key auto_increment comment ID,username …

这款轻量级规则引擎,真香!

大家好&#xff0c;我是老三&#xff0c;之前同事用了一款轻量级的规则引擎脚本AviatorScript&#xff0c;老三也跟着用了起来&#xff0c;真的挺香&#xff0c;能少写很多代码。这期就给大家介绍一下这款规则引擎。 简介 AviatorScript 是一门高性能、轻量级寄宿于 JVM &…

阿里云率先荣获容器集群稳定性先进级认证

7 月 25 日&#xff0c;由中国信通院发起的“2023 稳保体系”评估结果在可信云大会现场公布&#xff0c;阿里云容器服务 ACK 成为首批通过“云服务稳定运行能力-容器集群稳定性”评估的产品&#xff0c;并荣获“先进级”认证。 云原生技术正在激活应用构建新范式&#xff0c;构…

数据结构初阶--树和二叉树的概念与结构

目录 一.树 1.1.树的概念 1.2.树的相关概念 1.3.树的表示 1.4.树在实际中的运用 二.二叉树 2.1.二叉树的概念 2.2.特殊的二叉树 满二叉树 完全二叉树 2.3.二叉树的性质 2.4.二叉树的存储结构 顺序存储 链式存储 一.树 1.1.树的概念 树是一种非线性的数据结构&am…

【SVN】merge 合并trunk branch代码,解决冲突

在命令行模式下进入待merge的项目根目录 1.将指定url上的代码merge到本地当前文件夹下&#xff08;--dry-run表示test merge&#xff09; E:\project\ry\trunk\ees-tem>svn merge http://192.168.0.2/svn/repo/ProD/JinZay/EE S/code/ees-tem/branches/develop -c 1149491 …

5个方法!轻松提升Windows Server 2016性能!

​Windows Server 2016性能降低 ​“我们在使用Windows Server 2016时遇到了卡顿不流畅的问题&#xff0c;服务器&#xff08;300GB硬盘、16GB内存、4核CPU&#xff09;主要用于使用Office&#xff08;Word、Outlook、Excel&#xff09;和上网&#xff0c;客户表示很慢&…

顺序表小项目---通讯录的实现

文章目录 前言一、静态通讯录的需求分析与实现1.通讯录的结构体需求2.通讯录的功能需求3.通讯录的主函数创建4.通讯录的所用函数的实现1.通讯录的初始化2.通讯录的增加联系人3.通讯录的查找联系人4.通讯录的删除联系人5.通讯录的修改联系人6.联系人的排序 二、静态通讯录的需求…

使用Debate Dynamics在知识图谱上进行推理(2020)7.31+8.1

使用Debate Dynamics在知识图谱上进行推理 摘要介绍背景与相关工作我们的方法状态行为环境policiesDebate Dynamics 摘要 我们提出了一种新的基于 Debate Dynamics 的知识图谱自动推理方法。 其主要思想是将三重分类任务定义为两个强化学习主体之间的辩论游戏&#xff0c;这两…

n位的二进制可以表示多少个小数?

文章目录 导论推理过程结论练习 导论 首先来思考一个十进制小数是如何被转化成二进制的。它使用的方式&#xff1a;乘基取整。你想把它化成n进制&#xff0c;基数就是n。以小数0.6875为例&#xff0c;将它化成二进制 那么它化成二进制0.1101。以原码或补码表示成01101。 并不…

Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点,线段转曲线)

前言 本章讲解如何在gis地图中使用起止点和两个控制点(总共四个控制点)生成三阶贝塞尔曲线。 二阶贝塞尔曲线请参考上一章《Gis入门,如何根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种…

用Delphi编写一个通用视频转换工具,让视频格式转换变得更简单

用Delphi编写的简单视频格式转换程序&#xff0c;它使用TComboBox、TOpenDialog和TSaveDialog组件来选择转换格式、选择源视频文件和选择目标视频文件。程序还使用TEdit组件允许用户输入参数&#xff0c;然后将这些组件中的信息拼接成转换命令并在DOS窗口中运行它。 procedure…

认识springboot 之 了解它的日志 -4

前言 本篇介绍springboot的日志&#xff0c;如何认识日志&#xff0c;如何进行日志持久化&#xff0c;通过日志级别判断信息&#xff0c;了解Lombok插件的使用&#xff0c;通过Lombok自带注释更简洁的来完成日志打印&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0…

动手学深度学习—深度学习计算(层和块、参数管理、自定义层和读写文件)

目录 1. 层和块1.1 自定义块1.2 顺序块1.3 在前向传播函数中执行代码 2. 参数管理2.1 参数访问2.1.1 目标参数2.1.2 一次性访问所有参数2.1.3 从嵌套块收集参数 2.2 参数初始化2.2.1 内置初始化2.2.2 自定义初始化 2.3 参数绑定 3. 自定义层3.1 不带参数的层3.2 带参数的层 4. …

【PWN · 栈迁移】[BUUCTF][Black Watch 入群题]PWN

记一道栈迁移题目 前言 【PWN 栈迁移】[BUUCTF]ciscn_2019_es_2_Mr_Fmnwon的博客-CSDN博客 一、代码审计 总结信息如下&#xff1a; 1. 第12行存在栈溢出漏洞&#xff0c;刚好可以溢出覆盖到ebp和ret 2. 第9行可输入大量数据到bss段 二、思路过程 1.栈迁移 进能够覆盖e…

Nodejs 第八章(npm搭建私服)

构建npm私服 构建私服有什么收益吗&#xff1f; 可以离线使用&#xff0c;你可以将npm私服部署到内网集群&#xff0c;这样离线也可以访问私有的包。提高包的安全性&#xff0c;使用私有的npm仓库可以更好的管理你的包&#xff0c;避免在使用公共的npm包的时候出现漏洞。提高…

SAM(Segment Anything)大模型论文汇总

A Comprehensive Survey on Segment Anything Model for Vision and Beyond 论文&#xff1a;https://arxiv.org/abs/2305.08196 25页综述&#xff0c;198篇参考文献&#xff01;52个开源项目&#xff01;本文第一个全面回顾了分割一切模型(SAM)的研究和应用进展&#xff0c;…

AttributeError: module ‘PyQt5.QtGui‘ has no attribute ‘QMainWindow‘

场景描述&#xff1a; 这个问题是使用PyUIC将ui文件变成py文件后遇到的 解决办法&#xff1a; 改动1&#xff1a;把object改成QtWidgets.QMainWindow 改动2&#xff1a;增加__init__函数&#xff0c;函数结构如下&#xff1a; def __init__(self):super(Ui_MainWindow,self).…

vue03 es6中对数组的操作,vue对数据监控的原理(分别对对象和数组的监控)

在js中&#xff0c;对数组的操作一般都是固定的模式&#xff1a;常用的函数&#xff0c;具体的方法在这个文章中去看&#xff1a; http://t.csdn.cn/Fn1Ik 一般会用到的函数有&#xff1a; pop&#xff08;&#xff09; 这个函数是表示把数组中的元素&#xff08;数组&#xff…

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…