当前位置:   article > 正文

快慢指针寻找环入口——学习笔记_快慢指针循环链表入口

快慢指针循环链表入口

快慢指针常用于判断链表中是否有环和寻找链表中值。

快慢指针的原理在于一快一慢两个指针,快指针每次移动两个节点,慢指针每次移动一个节点。

 

如何判断链表有环?

假如链表没环,那么快指针必然会先遇到空指针,即可判断链表无环。

而当链表有环时,快慢指针必然在环内循环,那么此时快慢指针就像钟表上的时针和分针,不管怎么转总有一刻会重合在一起。

可能有同学还不是特别明白。

首先有个长度为n的环,假设此时快指针在x1处,慢指针在x2处。

  1. -------->x1---------->---
  2. ^ |
  3. | |
  4. | |
  5. ---<-----------x2<-------

此时快指针距离慢指针 d=x1+n-x2

快指针每次移动2,慢指针每次移动1,所以快指针相对慢指针移动1,那么只需要移动 d 次快指针就能追上慢指针了。

如果还不清楚就想想钟表吧~看代码:

  1. struct Node{
  2. int val;
  3. Node *next;
  4. };
  5. //判断链表是否有环
  6. bool hasCircle(Node *node) {
  7. //定义快慢指针
  8. Node *fast=node;
  9. Node *slow=node;
  10. //因为快指针要走两个节点,所以要多判断一步,遇到空指针说明没有环
  11. while (fast != NULL && fast->ne
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/895263
推荐阅读
相关标签
  

闽ICP备14008679号