你不知道的环形链表 ??

你不知道的环形链表 😊😊??

在这里插入图片描述


每博一文案

有人说,当你有一肚子的心里话,想要找个人倾诉的时候,
你一定要找真正懂你的人,因为不是所有人都会在乎你说的话。
愿意陪你,谈笑的人很多,但能倾听你心事的人很少,有些话只能
给懂的人听,和不懂自己的人,说再多也换不来一句关心。
快乐分享错了人,就成了显摆,
难过分享错了人,就成了侨情,
和懂你的人,倾诉,无需多言,他自懂你的委屈待遇,
不懂你的人,你的委屈和难过,对他来说就是轻描淡写,是过眼云烟
你说的再多,也只是无济于事,就像作家独木舟说的那样,
世界上其实根本就没有感同身受,这回事,
针不是刺到别人身上,他们就不知道有多痛。
                                 ——————————————   一禅心灵庙语


在这里插入图片描述


  • 同样的解决该问题的方法也是十分有意思的:
  • 使用一个二倍速的指针,如果存在 的话,这个快的二倍速指针 就会追上(相遇到)那个 的指针
  • 解决代码如下:
bool hasCycle(struct ListNode* head)
{
   if (NULL == head)
   {
      return false;
   }

   struct ListNode* slow = head;  // 慢指针
   struct ListNode* falst = head; // 快指针(二倍速)

   while (falst && falst->next) // NULL != falst && NULL != falst->next
   {
      slow = slow->next;  // 一次走一步
      falst = falst->next->next; // 一次走两步

      if (falst == slow) // 两指针相遇了,说明,该链表存在环
      {
         return true;    // 返回 true
      }
   }

   return false;        // 跳出循环了,链表走尽了,说明不存在环,返回 false
}

在这里插入图片描述


  • 如果一定存在环的情况下: slow 一次走 一步,falst 一次走 两步,它们俩一定会相遇吗?

在这里插入图片描述

答,存在环的情况下: slow 一次走 一步,falst 一次走 两步 是一定会相遇的,

slow 进环以后,falst 正式开始追 slow 了,这里假设,falstslow 之间的距离是 N ,那么在追的过程中,他们之间的距离变化是如下的:

在这里插入图片描述


  • 同样如果一定存在环的情况下: slow 每次走 一步,falst 每次走 三步,呢还会相遇吗 ??

答,slow 每次走 一步,falst 每次走 三步,就不一定会相遇了,有可能是永远错过不会相遇的

在这里插入图片描述

slow 进环以后,falst 正式开始追 slow 了,这里假设,falstslow 之间的距离是 N ,那么在追的过程中,他们之间的距离变化是如下的

在这里插入图片描述


  • 同样如果一定存在环的情况下: slow 每次走 一步,falst 每次走 四 步,呢还会相遇吗 ??

答,slow 每次走 一步,falst 每次走 四 步,就不一定会相遇了,有可能是永远错过不会相遇的

在这里插入图片描述

slow 进环以后,falst 正式开始追 slow 了,这里假设,falstslow 之间的距离是 N ,那么在追的过程中,他们之间的距离变化是如下的

在这里插入图片描述


最后:

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家!后会有期,江湖再见!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值