LeetCode 热题 HOT 100 (019/100)【宇宙最简单版】

news2024/9/24 21:27:04

【链表】No. 0142 环形链表 II【中等】👉力扣对应题目指路

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!

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

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

  • 不允许修改 链表

  • 示例:head = [3,2,0,-4], pos = 1

🔥 思路:设置快慢指针 fast slow, 如果有环的话,快慢指针会在环内相遇 (参考下图标记的相遇点)

  • 判断链表是否环:步长为 1slow和步长为 2fast相遇,则可判定有环
  • 推论一:快指针走了 n 圈,慢指针走了 1 圈:
    • 🍀为什么慢没完整走完一圈就被追上呢:因为慢如果跑了一圈说明快已经跑了两圈了
    • fast_idx = x + y + n*(z+y) ;slow_idx = x + y + (z+y)
    • fast_idx = 2*slow_idx: x + y + n*(z+y) = 2x + 2y + 2(z+y)
      • 简化获得: x = (n - 1) (y + z) + z:说明推论二
  • 推论二:一个从头节点处走 x 举例,一个从相遇处走很多圈 + z 距离,最终会在入口相遇 【结果需要的入口点】

参考如上思路,给出详细步骤如下:

  • 步骤一⭐初始化 快慢指针fast slow 都指向头节点 head
  • 步骤二⭐根据推论一移动快慢指针,有环则会相遇于图中所示相遇位置
    • 走到头都不相遇则说明无环
  • 步骤三⭐根据推论二移动临时重置到头节点的 temp 和上一步的 slow,相遇于图中所示入口位置
    • 返回相遇时的节点作为结果
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # ------------------------------------------- step 1
        slow = head
        fast = head
        while slow and fast and fast.next:  # ------- step 2
            slow = slow.next
            fast = fast.next.next
            if slow == fast: ## 快慢相遇,环判定成功,开始找环入口
                # ----------------------------------- step 3
                temp = head
                while not slow == temp:  
                    slow = slow.next
                    temp = temp.next
                return slow  # --------------------- step 3.1
        return None  # ----------------------------- step 2.1

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
🔥 LeetCode 热题 HOT 100

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

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

相关文章

Redis数据失效监听

一、配置Redis开启 打开conf/redis.conf 文件,添加参数:notify-keyspace-events Ex 二、验证配置 步骤一:进入redis客户端:redis-cli步骤二:执行 CONFIG GET notify-keyspace-events ,如果有返回值证明配…

初始化列表的基本介绍

为了树立初始化列表,我们先引进有参构造函数来理解 在上图的有参构造函数中我们可以将其转换为初始化列表,初始化列表有两种方式,一种是有参一种是无参,一会我会分别举例子,其语法为类名():属性(值&#xf…

ffmpeg: 将flv格式的视频推流时报错: Failed to update header with correct duration

问题描述 我在将flv格式的视频推给rtmp服务器的时候,报错Failed to update header with correct duration,截图如下: 我的推流命令是 ffmpeg -stream_loop -1 -re -i wait-voice.flv -c:a copy -c:v copy -f flv rtmp://192.18.1.29:1935/…

C++入门知识点总结(下篇·初学必看)

前言:Hello大家好😘,我是心跳sy,这篇文章将介绍下篇知识点内容,本系列文章将会更新关于C的全部初阶以及进阶的知识点,喜欢的小伙伴点个关注不迷路哦~我们一起来看看吧~ 目录 一、引用 💫 1.1…

SAP 如何通过程序创建一个请求

一:首先我们需要知道SAP的资源类型 PGMID :程序ID OBJECT :对象类型 OBJ_NAME:对象名称 SY-REPID 我们可以通过SE09/SE10来创建一个请求号也能看的出来 也可以通过SE03来查找 请求号相关的数据都在E07*的表里这边…

IP 地址分类

IP 地址有两个版本: IPv4 和 IPv6 ,目前使用最广泛的还是 IPv4 , IPv6 出现的目的主要是解决 IPv4 地址耗尽的问题。为了方便起见,在这里我们说的 IP 地址主要是指 IPv4 地址。 IP 地址是由 32 位比特组成,比如这个地…

初步认识二叉树

二叉树的概念及结构 二叉树在我们的想象中长这样 下图是满二叉树 二叉树有左右子树 1是根结点, 1的左子树是2,右子树是3; 2是根结点, 2的左子树是4,右子树是5; 3是根结点, 3的左子树是6…

odoo17 精减设置模块

odoo17 精减设置模块 设置模块中好多平时用不到的功能&#xff0c;如何隐藏&#xff0c;采取了继承修改方式&#xff0c;代码如下: <?xml version"1.0" encoding"utf-8" ?> <odoo><record id"resconfig_ex_form" model"i…

《人工智能商》:谁掌握了人工智能时代的思考方式,谁就掌握了未来

文/石墨杨&#xff08;shimoyang11&#xff09; 在可以预见的未来&#xff0c;马路上行驶着自动驾驶的汽车&#xff0c;工厂里忙碌着不知疲倦的机器人&#xff0c;网络电商会精准推荐你需要的商品&#xff0c;社交网站自动帮你识别令你心仪的朋友…… 《人工智能商》一书&#…

穿黑风衣的牛奶--生产问题之CompletableFuture默认线程池踩坑,请务必自定义线程池

前言 先说结论&#xff0c;没兴趣了解原因的可以只看此处的结论 CompletableFuture是否使用默认线程池的依据&#xff0c;和机器的CPU核心数有关。当CPU核心数-1大于1时&#xff0c;才会使用默认的线程池&#xff0c;否则将会为每个CompletableFuture的任务创建一个新线程去执…

代码随想录算法(哈希表二)

目录 454四数相加 15三数之和 双指针法 18四数之和 剪枝操作 454四数相加 暴力操作就是四个for循环 这个题目是用哈希表来解答 我们可以将ab进行一个遍历放到一个数组里面 再将cd来放到一个数组中 来看一下是否cd中有ab所需要的值 由于这个题目是int这种 所以只能从set 和…

vue中怎么自定义组件

目录 一&#xff1a;功能描述 二&#xff1a;实现过程 一&#xff1a;功能描述 在开发过程中我们经常需要自定义组件完成特定的功能&#xff0c;比如用户详情页&#xff0c;我增加一个调整余额的按钮&#xff0c;点击以后需要打开一个调整余额对话框&#xff0c;输入调整的金…

Babel 7入门基础知识 全面 实践案例篇【1】推荐。

babel前面我们梳理总结 webpack入门基础知识的时候已经用过了。趁着这个机会顺便把Babel基础知识回顾梳理一下&#xff0c;也欢迎正在使用babel的同学一起交流探讨&#xff0c;感谢。 目录 一、Babel是什么&#xff1f; 二、.Babel是如何工作的呢&#xff1f;或者原理是什么…

Windos 执行.sh文件提示没有足够权限执行的解决办法

找到Git安装目录下的sh.exe文件 右键以管理员方式运行 cd到.sh文件所在目录&#xff0c;注意使用 / 而不是 \ 执行.sh文件即可

JavaScript中闭包的概念与其造成的性能问题

如果一个函数没有访问任何外部作用域的变量或方法&#xff0c;那么它其实是拥有闭包特性的&#xff0c;因为在 JavaScript 中&#xff0c;每个函数都可以理解为对其创建时所处作用域的引用。从这个角度来说&#xff0c;即使普通函数本身并没有捕获外部变量&#xff0c;但它们仍…

JAVA集中学习第四周学习记录(四)

系列文章目录 第一章 JAVA集中学习第一周学习记录(一) 第二章 JAVA集中学习第一周项目实践 第三章 JAVA集中学习第一周学习记录(二) 第四章 JAVA集中学习第一周课后习题 第五章 JAVA集中学习第二周学习记录(一) 第六章 JAVA集中学习第二周项目实践 第七章 JAVA集中学习第二周学…

WPF篇(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮

CheckBox复选框 CheckBox继承于ToggleButton&#xff0c;而ToggleButton继承于ButtonBase基类。 案例 前端代码 <StackPanel Orientation"Horizontal" HorizontalAlignment"Center" VerticalAlignment"Center"><TextBlock Text"…

Redis的过期策略与内存淘汰机制详解

文章目录 Redis的过期策略1. 定时删除2. 惰性删除3. 定期删除 Redis的内存淘汰机制1. noeviction2. volatile-random3. volatile-ttl4. volatile-lru5. volatile-lfu6. allkeys-random7. allkeys-lru8. allkeys-lfu LRU与LFU算法总结 Redis作为一种高性能的键值对存储系统&…

C语言 之 理解指针(9)与指针相关的理解题

文章目录 代码1代码2代码3代码4代码5代码6代码7 本篇内容接上一篇&#xff0c;对指针进行一个更深入的理解 建议没看过 上一篇的可以看看上一篇&#xff0c;当然不看也可以。 建议先自行完成再看答案哟 代码1 #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, …

B站千亿级点赞系统服务架构设计

B站千亿级点赞系统服务架构设计 原文链接&#xff1a;https://www.bilibili.com/read/cv21576373/ 原文作者&#xff1a;哔哩哔哩技术团队-芦文超 点赞的功能太过于简单不再赘述&#xff0c;大家可以点击原文链接简单看下便可知晓。 本讲结合B站知名UP主陆总监的一期视频(h…