C语言力扣刷题8——环形链表——[快慢双指针, 龟兔赛跑]

力扣刷题8------环形链表------[快慢双指针, 龟兔赛跑]

一、博客声明

找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解题思路,开辟这个系列来记录。代码可能不是自己写的,不求方法最好,只求更多地理解大佬们的解题思路。


二、题目描述

给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false

示例 1:

输入:head = [3,2,0,-4], pos = 1

输出:true

解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0

输出:true

解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1

输出:false

解释:链表中没有环。

提示:

链表中节点的数目范围是 [0, 104]
-10^5 <= Node.val <= 10^5
pos-1 或者链表中的一个 有效索引 。


三、解题思路

1、思路说明

龟兔赛跑,快指针比慢指针快两个节点,只要存在环形链表,就会相遇。




四、解题代码(附注释)

c 复制代码
bool hasCycle(struct ListNode* head) {
    if (head == NULL || head->next == NULL) {
        return false;
    }
    struct ListNode* slow = head;
    struct ListNode* fast = head->next;
    while (slow != fast) {
        if (fast == NULL || fast->next == NULL) {
            return false;
        }
        slow = slow->next;
        fast = fast->next->next;
    }
    return true;
}
相关推荐
编程绿豆侠36 分钟前
力扣HOT100之链表:23. 合并 K 个升序链表
算法·leetcode·链表
爱学习的章鱼哥41 分钟前
如何实现一个可视化的文字编辑器(C语言版)?
c语言·编辑器·文本编辑器·程序设计·easyx
盐烟1 小时前
C语言-函数练习1
c语言·开发语言·笔记
simple_whu2 小时前
Visual Studio C/C++编译器cl.exe的/source-charset与/execution-charset设置项
c语言·c++·visual studio
敲代码的瓦龙4 小时前
C++?动态内存管理!!!
c语言·开发语言·数据结构·c++·后端
序属秋秋秋4 小时前
《数据结构初阶》【顺序表 + 单链表 + 双向链表】
c语言·数据结构·笔记·链表
草莓熊Lotso5 小时前
【C语言操作符详解(一)】--进制转换,原反补码,移位操作符,位操作符,逗号表达式,下标访问及函数调用操作符
c语言·经验分享·笔记
OpenC++5 小时前
【C++QT】Layout 布局管理控件详解
c++·经验分享·qt·leetcode
猫猫头有亿点炸5 小时前
C语言大写转小写2.0
c语言·开发语言
1白天的黑夜15 小时前
贪心算法-860.柠檬水找零-力扣(LeetCode)
c++·算法·leetcode·贪心算法