当前位置: 首页 > article >正文

题目讲解17 判断链表中是否有环

原题链接:

判断链表中是否有环_牛客题霸_牛客网

思路分析:

这题需要用到快慢指针算法。

第一步:创建两个指针,让它们都指向链表的头结点。

    ListNode* slow, *fast;
    slow = fast = head;

第二步:遍历链表,慢指针一次走一步,快指针一次走两步,如果链表有环的话,两个指针是一定会相遇的。这就像在操场上跑步一样,跑的快的肯定会再次看见跑的比他慢的。

开始循环之前:

 第一次循环之后:

 第二次循环之后:

第三次循环之后:

 fast遇到了slow就说明有环,如果遍历完了链表还没有相遇,那就是链表无环。

    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        {
            return true;
        }
    }
    return false;

完整代码:

typedef struct ListNode ListNode;
bool hasCycle(struct ListNode* head)
{
    ListNode* slow, *fast;
    slow = fast = head;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        {
            return true;
        }
    }
    return false;
}


http://www.kler.cn/a/398473.html

相关文章:

  • git push时报错! [rejected] master -> master (fetch first)error: ...
  • 【软件测试】设计测试用例的万能公式
  • Day18 Nim游戏
  • 8.C++面向对象5(实现一个较为完善的日期类)
  • 实验8.1 无失真信源编码的实现
  • 蓝桥杯-洛谷刷题-day3(C++)
  • BigQuery中jobUser和dataViewer的角色有什么不同
  • C++ 内联函数
  • 006.精读《Apache Paimon Docs - Concepts》
  • ArkTs简单入门案例:简单的图片切换应用界面
  • AWTK-WIDGET-WEB-VIEW 发布
  • C++11实现线程库
  • 21.3D surface
  • Python 子进程输出重定向以后,部分内容会出现在父进程的控制台屏幕上
  • .NET 一款SYSTEM权限隐藏的计划任务工具
  • vxe-grid table 校验指定行单元格的字段,只校验某个列的字段
  • Leetcode 3356. Zero Array Transformation II
  • uni-app快速入门(六)--rpx尺寸单位与Flex布局
  • 【网络安全面经】OSI七层模型每层都有什么协议
  • 【网络安全】SSL(一):为什么需要 Keyless SSL?
  • 023、ELK 从入门到实践
  • 【AI日记】24.11.17 看 GraphRAG 论文,了解月之暗面
  • 深度学习中常见的学习率调整策略
  • 蓝桥杯c++算法学习【4】之简单数论(阶乘约数、求值、循环小数、等差数列、最大比例:::非常典型的必刷例题!!!)
  • PyCharm2024.2.4安装
  • 【初阶数据结构与算法】链表刷题之链表分割、相交链表、环形链表1、环形链表I、环形链表II