【LeetCode每日一题】——142.环形链表 II

news2025/4/19 11:14:31

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【题目进阶】
  • 九【时间频度】
  • 十【代码实现】
  • 十一【提交结果】

一【题目类别】

  • 链表

二【题目难度】

  • 中等

三【题目编号】

  • 142.环形链表 II

四【题目描述】

  • 给定一个链表的头节点 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
      • 解释:链表中没有环。

六【解题思路】

  • 本题是【LeetCode每日一题】——141.环形链表的加强版本
  • 首先我们需要找到快慢指针第一次相遇的位置
  • 然后再将快指针指向链表头节点
  • 之后快指针和慢指针每次都走一步,它们再次相遇的地方就是环的入口
  • 最后返回结果即可
  • 证明如下:
    • 设head(起点)到快慢指针第一次相遇的地方距离为 d d d(也是慢指针的路程),环长为 L L L,head到环的入口距离为 x 1 x_1 x1,快慢指针第一次相遇正方向距离环的入口距离为 x 2 x_2 x2
    • 当快慢指针第一次相遇时,快指针走的路程为 L + d L+d L+d(因为快指针肯定比慢指针多走一圈),因为快指针的速度是慢指针的两倍,所以当快慢指针第一次相遇时,慢指针走的路程为 2 d 2d 2d,那么有: L + d = 2 d L+d = 2d L+d=2d,所以 L = d L=d L=d
    • 易知: L − x 2 = d − x 1 L-x_2=d-x_1 Lx2=dx1,所以 x 1 = x 2 x_1=x_2 x1=x2
    • 综上所述,当快慢指针第一次相遇后,将慢指针移动到head(起点)到环的入口距离等于慢指针到环的入口的距离,所以当快慢指针此时每次走一步相遇的时候,就是环的入口

七【题目提示】

  • 链 表 中 节 点 的 数 目 范 围 在 范 围 [ 0 , 1 0 4 ] 内 链表中节点的数目范围在范围 [0, 10^4] 内 [0,104]
  • − 1 0 5 < = N o d e . v a l < = 1 0 5 -10^5 <= Node.val <= 10^5 105<=Node.val<=105
  • p o s 的 值 为 − 1 或 者 链 表 中 的 一 个 有 效 索 引 pos 的值为 -1 或者链表中的一个有效索引 pos1

八【题目进阶】

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

九【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为链表的长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

十【代码实现】

  1. Java语言版
public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while(true){
            if(fast == null || fast.next == null){
                return null;
            }
            slow = slow.next;
            fast = fast.next.next;
            if(slow == fast){
                break;
            }
        }
        fast = head;
        while(fast != slow){
            slow = slow.next;
            fast = fast.next;
        }
        return fast;
    }
}
  1. C语言版
struct ListNode *detectCycle(struct ListNode *head) 
{
    struct ListNode* slow = head;
    struct ListNode* fast = head;
    while(true)
    {
        if(fast == NULL || fast->next == NULL)
        {
            return NULL;
        }
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        {
            break;
        }
    }
    fast = head;
    while(slow != fast)
    {
        slow = slow->next;
        fast = fast->next;
    }
    return fast;
}

十一【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

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

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

相关文章

Java百度地图全套教程(地图找房、轻骑小程序、金运物流等)

课程简介&#xff1a; 本课程基于百度地图技术&#xff0c;将企业项目中地图相关常见应用场景的落地实战&#xff0c;包括有地图找房、轻骑小程序、金运物流等。同时还讲了基于Netty实现高性能的web服务&#xff0c;来处理高并发的问题。 学完本课程能够收获&#xff1a;百度…

支持本地挂载的网盘文件列表工具AList

什么是 Alist&#xff1f; AList 是一个支持多存储的文件列表程序&#xff0c;使用 Gin 框架和 Solidjs 库。可以将常见的 18 种网盘整合在一起&#xff0c;并支持 WebDAV 客户端访问。 之前老苏写过一篇 Alist&#xff0c; 但此 Alist 非彼 Alist&#xff0c;之前的 A 应该是 …

React基础知识(React基本使用、JSX语法、React模块化与组件化)(一)

系列文章目录 文章目录系列文章目录一、React简介1.1 React的特点1.2 React高效的原因二、React基本使用2.1 引入react相关js库2.2 创建虚拟DOM的两种方法2.3 虚拟DOM和真实DOM三、JSX基本使用3.1 jsx使用四、React模块化与组件化4.1 函数式组件4.2 类式组件一、React简介 1.英…

Kafka消费者组消费进度监控

针对Kafka消费者&#xff0c;重要的就是监控消费进度或者是消费的滞后程度&#xff0c;有个专业名词 消费者 Lag 或 Consumer Lag。 滞后程度&#xff08;Consumer Lag&#xff09;是指消费者当前落后生产者的程度。比如Kafka 生产者向某主题成功生产了 100 万条消息&#xff0…

一个.NetCore前后端分离、模块化、插件式的通用框架

今天给大家推荐一个基于.NET 6实现的快速开发平台。采用模块化插件式开发&#xff0c;前后端分离&#xff0c;开箱即用。 项目简介 这是一个开箱即用的快速开发平台&#xff0c;前后端分离架构&#xff0c;支持插件式开发&#xff0c;支持工作流、可视化表单功能。系统基础功…

Qt 快速读写Excel指南

Qt Windows 下快速读写Excel指南 很多人搜如何读写excel都会看到用QAxObject来进行操作&#xff0c;很多人试了之后都会发现一个问题&#xff0c;就是慢&#xff0c;非常缓慢&#xff01;因此很多人得出结论是QAxObject读写excel方法不可取&#xff0c;效率低。 后来我曾试过用…

网络攻击损失不容小觑

据研究数据显示&#xff0c;2022年数据泄露给企业造成的平均损失为435万美元&#xff1b;如果是勒索软件攻击&#xff0c;损失将增加到454万美元。当然这只是估计&#xff0c;在某些国家或地区平均损失更高&#xff0c;比如在美国&#xff0c;损失接近1000万美元。 此外&#x…

如何制作并使用动静态库

制作并使用动静态库&#x1f3de;️1. 动静态库概念&#x1f301;2. 如何制作动静态库&#x1f4d6;2.1 制作静态库&#x1f4d6;2.2 制作动态库&#x1f320;3. 如何使用动静态库&#x1f4d6;3.1 使用静态库&#x1f4d6;3.2 使用动态库&#x1f341;4. 动态库的加载原理&…

Mybatis-plus实战项目演示+自定义元数据对象处理器+ws

目录 一&#xff0c;mybatis-plus实战一 1.导入依赖 2.application.yml配置 3.实体类 4.mapper 5.service层 6.启动类上配置 二&#xff0c;mybatis-plus实战二 1.导入依赖 2.application.yml配置 3.实体类 2.mapper 3.service 4.分页配置 5.放一个在controller层…

jeecg-boot中实现跳过登录验证访问其他vue页面

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff0c;雄雄的小课堂。 前言 大家都知道&#xff0c;我们正常的项目&#xff0c;都做了访问限制&#xff0c;也就是&#xff0c;只有当用户登录本平台后&#xff0c;才能让用户访问别的页面&#xff0c;否则默认…

【Vue】Vue中mixins的使用方法及实际项目应用详解

文章目录&#xff08;1&#xff09;mixin基础&#xff08;2&#xff09;mixin特点1.选项合并2.方法和参数在各组件中不共享&#xff08;3&#xff09;mixin与vuex的区别&#xff08;4&#xff09;mixin与公共组件的区别&#xff08;5&#xff09;项目实践&#xff08;6&#xf…

Session | 基于Session改造oa项目的登录功能

目录 一&#xff1a;总结域对象 二&#xff1a;基于Session改造oa项目的登录功能 三&#xff1a;oa项目的安全退出系统 一&#xff1a;总结域对象 &#xff08;1&#xff09;request&#xff08;对应的类名&#xff1a;HttpServletRequest&#xff09; 请求域&#xff08;请…

【机器学习】机器学习30个笔试题

机器学习试题 在回归模型中&#xff0c;下列哪一项在权衡欠拟合&#xff08;under-fitting&#xff09;和过拟合&#xff08;over-fitting&#xff09;中影响最大&#xff1f;&#xff08;A&#xff09; A. 多项式阶数 B. 更新权重 w 时&#xff0c;使用的是矩阵求逆还是梯度下…

几款超好用的内网穿透神器,总有一款适合你!

本文以渗透的视角&#xff0c;总结几种个人常用的内网穿透&#xff0c;内网代理工具&#xff0c;介绍其简单原理和使用方法。 0x01 nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协…

前端js长整型精度丢失处理

一、现象 在分页查询时&#xff0c;服务端会将返回的对象进行json序列化&#xff0c;转换为json格式的数据&#xff0c;而用户的ID是一个Long类型的数据&#xff0c;而且是一个长度为 19 位的长整型数据&#xff0c; 该数据返回给前端是没有问题的。 问题实际上&#xff0c; …

适用于Unity的 Google Cardboard XR Plugin快速入门

本指南向您展示如何使用 Google Cardboard XR Plugin for Unity 创建您自己的虚拟现实 (VR) 体验。 您可以使用 Cardboard SDK 将移动设备变成 VR 平台。移动设备可以显示具有立体渲染的 3D 场景&#xff0c;跟踪头部运动并对其做出反应&#xff0c;并通过检测用户何时按下查看…

MySQL篇【5】——约束

目录表的约束空属性默认值列描述zerofill主键自增长唯一键外键如何理解外键约束在数据库的实际操作中难免会有一些操作不规范的地方&#xff0c;比方说在一张学生成绩表中&#xff0c;成绩的最高值为100&#xff0c;那么如果在这张表中如果出现了超过100分的成绩那显然是不合理…

单片机定时器

定时器 STM32有11个定时器&#xff0c;2个高级定时器、4个通用定时器&#xff0c;2个基本定时器&#xff0c;1个系统嘀嗒定时器&#xff08;systick&#xff09;&#xff0c;2个看门狗定时器。 定时器计算&#xff1a; Tout((per)psc)/Tclk t&#xff08;f/pre&#xff09;per…

Spire.Office for Java 7.12.2 迎接新年/圣诞!!!

谷歌找破解版Spire.Office for Java is a combination of Enterprise-Level Office Java APIs offered by E-iceblue. It includes Spire.Doc for Java, Spire.XLS for Java, Spire.Presentation for Java, Spire.PDF for Java and Spire.Barcode for Java.内容及配图来自网络 …

cv2.findContours() 图像的轮廓

cv2.findContours(image, mode, method, contoursNone, hierarchyNone, offsetNone)参数&#xff1a; image&#xff1a;寻找轮廓的图像&#xff0c;注意输入的图片必须为二值图片。若输入的图片为彩色图片&#xff0c;必须先进行灰度化和二值化 mode&#xff1a;轮廓的检索模…