美文网首页
判断单链表是否有环及寻找环的

判断单链表是否有环及寻找环的

作者: Magic11 | 来源:发表于2018-03-13 09:51 被阅读0次

若单链表中存在环,则环肯定在单链表的尾部,如果通过一个指针遍历单链表,最终这个指针会在单链表尾部的环中不断循环,其实质问题是判断这个指针是否落在一个环中。
这种问题我们可以联想到时钟,虽然时针和分针以不同的间隔旋转,但它们必须会有相遇的时候,如果时钟不是一个圆,它们就没有相遇的时候了。
所以我们可以设置两个指针,慢指针每次前进一个节点,快指针每次前进两个节点,如果它们相遇,则单链表必定存在环,否则不存在环。
那么如果找到环的入口点呢,这里需要进行几步数学推导,首先看下图:


image.png

假设单链表的起点是A,环的入口点是B,慢指针和快指针第一次相遇的点是C, 注意慢指针和快指针第一次相遇的时候,慢指针还没有遍历完整个单链表,假设慢指针此时前进的距离为s,快指针此时前进的距离为2s
若环的长度为r, A和入口点B之间的距离为k, 入口点距第一次相遇点C的距离为l, C距链表的尾部的距离为h, (也就是剩余的环的长度),
假设两个指针相遇前,快指针已经围圆环走了n圈,
2s = s + nr;
从而 s = nr;
k + l = nr
k = nr - l
k = (n-1)r + (r - l)
最终有 k = (n-1)r + h
也就是说,若有一个指针从A节点开始遍历,另一个指针从相遇点C开始遍历,则在它们必然会在入口点B相遇。

相关文章

  • 检测链表有环

    题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点。 一、单链表是否有环 思路分析: 单链表有环,是指...

  • 判断单链表是否有环及寻找环的

    若单链表中存在环,则环肯定在单链表的尾部,如果通过一个指针遍历单链表,最终这个指针会在单链表尾部的环中不断循环,其...

  • 判断单链表是否有环、求环长和环入口最优算法

    判断单链表是否有环、求环长和环入口最优算法 判断单链表是否有环是一个十分经典的算法问题,许多考试或者面试都有很大的...

  • 2022-02-27环形链表linked-list-cycle

    1.判断单链表是否有环 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续...

  • 链表算法面试?看我就够了!——链表中存在环问题

    链表中存在环问题 3.1 判断链表是否有环 单链表中的环是指链表末尾的节点的 next 指针不为 NULL ,而是...

  • 有环单链表的相关问题

    问题:判断单链表是否有环;若有环,找出环的入口节点;若有环,求出环上节点的个数;若有环,求出整个链表的节点的个数;...

  • 快慢指针的应用

    什么是快慢指针:快慢指针是链表操作中的常用操作,最经典的应用是判断单链表中是否有环。 判断单链表是否存在环 两个指...

  • 判断一个单链表是否存在环

    问题:如题,判断一个单链表是否存在环 分析:判断一个单链表是否存在环,问题情况分为如下 [x] 首尾相连 [x] ...

  • 常见的面试算法题

    判断链表是否有环

  • 链表

    现在有一个单向链表,谈一谈,如何判断链表中是否出现了环 考察点:链表参考回答:单链表有环,是指单链表中某个节点的n...

网友评论

      本文标题:判断单链表是否有环及寻找环的

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