美文网首页
如何判断单链表是否存在环

如何判断单链表是否存在环

作者: millions_chan | 来源:发表于2017-04-06 00:12 被阅读51次

给定一个单链表,只给出头指针h:

  1. 如何判断是否存在环?
  2. 如何知道环的长度?
  3. 如何找出环的连接点在哪里?
  4. 带环链表的长度是多少?

下面我们来依次分析上面的问题。

如何判断是否存在环

这里我们考虑使用快慢指针的方式。快指针 fast 每次移动2个节点,慢指针 slow 每次移动一个节点。如果没有环,则 fast 指针将碰到 null,如果有环,则 fast 会在若干次移动后追上 slow。

为什么呢?假定单链表的长度为n,并且该单链表是环状的,那么第i次迭代时,p指向元素i mod n,q指向2i mod n。因此当i≡2i(mod n)时,p与q相遇。而i≡2i(mod n) => (2i - i) mod n = 0 => i mod n = 0 => 当i=n时,p与q相遇。

那么当p与q起点不同呢?假定第i次迭代时p指向元素i mod n,q指向k+2i mod n,其中0<k<n。那么i≡(2i+k)(mod n) => (i+k) mod n = 0 => 当i=n-k时,p与q相遇。

如何知道环的长度

由上一部分的分析我们可以知道,当起点相同时,i 等于 n 时两者会再次相遇,所以从相遇点开始,快慢指针再次相遇时经过的步骤数为环的长度。

如何找出环的连接点在哪里

假设第一个在环里的节点为节点 k,那么由上面的分析知道,满节点到达 k 节点时,快节点已经领先了慢节点 k mod n,所以相遇点在 i = n - k 处。这样,一个节点从相遇点开始,一个节点从头结点开始,以相同的速度行走,最终,经过k步,一个刚好从到达n,即回到了起点处,另外一个到达了 k,即起点处。

带环链表的长度是多少

已经知道了环的长度和环的入口,可以计算出链表的长度。

相关文章

  • 检测链表有环

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

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

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

  • 单链表中存在环的相关问题Java实现

    问题描述 判断一个单链表是否有环? 如果存在环,如何得到环中节点的数目? 如果存在环,如何找到环的入口? 解题思路...

  • 如何判断单链表是否存在环

    给定一个单链表,只给出头指针h: 如何判断是否存在环? 如何知道环的长度? 如何找出环的连接点在哪里? 带环链表的...

  • 快慢指针的应用

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

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

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

  • 链表的操作和算法相关

    github->demo1、创建(单链表、双链表、循环链表)2、翻转单链表(递归和非递归)3、判断链表是否存在环。...

  • 如何判断链表是否有环

    给定一个单链表,只给出头指针: 1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带...

  • 链表

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

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

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

网友评论

      本文标题:如何判断单链表是否存在环

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