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

这篇具有很好参考价值的文章主要介绍了​LeetCode解法汇总142. 环形链表 II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 目录链接:

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

GitHub同步刷题项目:

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

原题链接:

力扣

描述:

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

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

不允许修改 链表。

示例 1:

​LeetCode解法汇总142. 环形链表 II,编程题,leetcode,算法,职场和发展

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

示例 2:

​LeetCode解法汇总142. 环形链表 II,编程题,leetcode,算法,职场和发展

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

示例 3:

​LeetCode解法汇总142. 环形链表 II,编程题,leetcode,算法,职场和发展

输入: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。

*/文章来源地址https://www.toymoban.com/news/detail-622907.html

代码:

 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;
    }

到了这里,关于​LeetCode解法汇总142. 环形链表 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • LeetCode刷题:142. 环形链表 II

    LeetCode刷题:142. 环形链表 II

    题目: 是否独立解决: 否,参考了解题思路解决问题,思考了用快慢指针,栈,统计链表数量定位尾巴节点(因为是环形链表所以是死循环,链表数量用while循环统计不出来)都没解决 解题思路:这题其实和环形链表一样的解题思路,用哈希set将数据都存储进去,如果发现

    2024年01月21日
    浏览(8)
  • LeetCode[141] [142] 环形链表I II

    141. 环形链表 - 力扣(LeetCode) 142. 环形链表 II - 力扣(LeetCode) 题解: 快慢指针题 从head开始,一个快指针,一次前进两步,一个慢指针,一次走一步 如果没有环,则快指针首先到达链表尾部, 如果有环,快慢指针肯定能相遇即fast=slow 141代码: 对于142需要环的起点,需要

    2024年02月04日
    浏览(10)
  • 代码随想录 Leetcode142. 环形链表 II

    代码随想录 Leetcode142. 环形链表 II

            双指针解决百分之99的链表题

    2024年01月19日
    浏览(15)
  • 【刷题专栏—突破思维】LeetCode 142. 环形链表 II

    【刷题专栏—突破思维】LeetCode 142. 环形链表 II

    前言 :本篇博客将讲解三个OJ题,前两个作为铺垫,最后完成环形链表的节点的寻找 题目链接:LeetCode—相交链表 题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节

    2024年02月05日
    浏览(8)
  • leetcode 141.环形链表 I - 142.环形链表 II 代码及指针相遇证明问题

    leetcode 141.环形链表 I - 142.环形链表 II 代码及指针相遇证明问题

    给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。 思路: 快慢指针问题 。我们可以声明一个 fast 指针(一次走两步),声明一个 slow

    2024年02月12日
    浏览(12)
  • LeetCode - 142. 环形链表 II (C语言,快慢指针,配图)

    LeetCode - 142. 环形链表 II (C语言,快慢指针,配图)

            如果你对快慢指针,环形链表有疑问,可以参考下面这篇文章,了解什么是环形链表后,再做这道题会非常简单,也更容易理解下面的图片公式等。 LeetCode - 141. 环形链表 (C语言,快慢指针,配图)-CSDN博客         上述文章总结: 如果一个链表是环形链表,采用

    2024年02月05日
    浏览(41)
  • [LeetCode]-160. 相交链表-141. 环形链表-142.环形链表II-138.随机链表的复制

    [LeetCode]-160. 相交链表-141. 环形链表-142.环形链表II-138.随机链表的复制

    目录 160.相交链表  题目 思路 代码  141.环形链表  题目 思路 代码 142.环形链表II 题目 思路 代码 160. 相交链表 - 力扣(LeetCode) https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 给你两个单链表的头节点  headA  和  headB  ,请你找出并返回两个单链表相交的起始节点

    2024年02月05日
    浏览(25)
  • 每日两题 / 142. 环形链表 II & 146. LRU 缓存(LeetCode热题100)

    每日两题 / 142. 环形链表 II & 146. LRU 缓存(LeetCode热题100)

    142. 环形链表 II - 力扣(LeetCode) 用哈希记录走过的节点即可 146. LRU 缓存 - 力扣(LeetCode) O ( 1 ) O(1) O ( 1 ) 地查找并修改kv结构,用unordered_map即可解决 问题是题目要求:哈希表容量有限,超出容量时,将删除最久未访问的kv 那么关键就在于:如何用数据结构表示访问的先后顺

    2024年04月16日
    浏览(10)
  • 数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

    数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

    目录 一.前言  二.leetcode160. 相交链表  1.问题描述 2.问题分析与求解 三.leetcode141. 环形链表 1.问题描述 2.代码思路  3.证明分析  下一题会用到的重要小结论: 四.leetcode142. 环形链表 II 1.问题描述 2.问题分析与求解 Judgecycle接口: 方法一: 方法二:  单链表和带环单链表

    2023年04月08日
    浏览(12)
  • 代码随想录第四天|LeetCode24. 两两交换链表中的节点,LeetCode19.删除链表的倒数第N个节点,LeetCode面试题 02.07. 链表相交,LeetCode142.环形链表II

    代码随想录第四天|LeetCode24. 两两交换链表中的节点,LeetCode19.删除链表的倒数第N个节点,LeetCode面试题 02.07. 链表相交,LeetCode142.环形链表II

    LeetCode24. 两两交换链表中的节点 题目链接:24. 两两交换链表中的节点 - 力扣(LeetCode) 思路: 先定义一个虚拟头结点方便操作。 再就是交换相邻两个元素了, 此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序 初始时,cur指向虚拟头结点,然后进行

    2024年02月09日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包