美文网首页
环形链表的入口

环形链表的入口

作者: 小杨不是小羊 | 来源:发表于2024-04-10 16:05 被阅读0次

链表是否有环可用使用快慢指针进行判断,快慢指针相遇则存在环。
在此基础上需要查找环的入口则需分析环形节点之间的关系。
使用set记录节点这种方式这里不讲很容易理解。


image.png

设 A 为起点到环入口节点的距离,B 为从环入口到快慢指针相遇节点的距离,C 为从快慢指针节点继续前进到再次到环入口节点的距离。
2A + 2B = A + n(B+C) + B
n为快指针在与慢指针相遇前在环内循环次数。
等式左边为两倍慢指针的距离,等式右边为快指针走的距离。
A = n-1(B+C)+ C
通过这个公式将P1指针指向起点,P2指针指向B,C节点就是快慢指针相遇节点。同时推进P1,P2。
当P1,P2相遇所在节点就是环的入口。

    public ListNode detectCycle(ListNode head) {
        ListNode slow = head, fast = head;
        while(null != fast && null != fast.next){
            slow = slow.next;
            fast = fast.next.next;
            if(slow == fast){
                fast = head;
                while(fast != slow){
                    fast = fast.next;
                    slow = slow.next;
                }
                return slow;
            }
        }
        return null;
    }

相关文章

  • 实现单向-双向环形链表

    单向环形链表 双向环形链表

  • 数据结构与算法整理

    (1)链表的技巧 快慢指针(找环,环入口,环长度) 双指针(倒数K个节点) 合并链表(递归求解) 约瑟夫环(环形链...

  • 双指针

    一、双指针总结 1.1题目 快慢指针(主要解决链表中的问题) 141.环形链表 142.环形链表 II 876.链...

  • 算法(Algorithms)第4版 练习 1.3.29

    题目 使用环形链表实现队列(FIFO),环形链表也是链表,只是没有任何一个节点的链接是空的,且只有链表非空则 la...

  • Tourist with Data Structure Seco

    链表 读题要仔细,只看题干,容易死的很惨。 设计链表 环形链表 一般环形链表使用快慢指针方式去做,快慢指针算法。参...

  • 02-14:leetcode重刷8之哈希与数组

    链表: 判断链表是否环形、是否回文 1、是否链表 #Definitionforsingly-linkedlist....

  • Java实现链表中环的检测

    链表中环的检测,就是判断链表中是否存在环形结构。带有环形结构的链表如下图所示: image.png 这里提供两种解...

  • 判断一个链表是否为环形链表

    判断一个链表是否为环形链表 思路:通过检测一个节点此前是否已经被访问过来判断链表是否为环形链表。 算法: 我们遍历...

  • 【2019-08-21】leetcode(141-150)

    141、环形链表 142、环形链表II 143、重排链表 144、二叉树的前序遍历 145、二叉树后序遍历 146...

  • 单项环形链表介绍和约瑟夫问题

    单项环形链表介绍和约瑟夫问题 1.单项环形链表图解 2.Josephu(约瑟夫)问题 Josephu 问题为:设...

网友评论

      本文标题:环形链表的入口

      本文链接:https://www.haomeiwen.com/subject/oqgqxjtx.html