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;
}
相关推荐
mywyu_wmb10 分钟前
编译CEF 132.3.3
c语言
wadesir19 分钟前
Judy数组:C语言中的高性能动态数组(全面入门Judy库使用指南)
c语言·开发语言
代码游侠20 分钟前
学习笔记——Linux内核链表
linux·运维·笔记·学习·算法·链表
sheeta199820 分钟前
LeetCode 每日一题笔记 日期:2025.12.14 题目:2147.分隔长廊的方案数
linux·笔记·leetcode
一个平凡而乐于分享的小比特22 分钟前
C语言中 volatile 关键字总结
c语言·volatile
发疯幼稚鬼22 分钟前
插入排序与冒泡排序
c语言·数据结构·算法·排序算法
一个平凡而乐于分享的小比特28 分钟前
static 关键字详解
c语言·static
一个平凡而乐于分享的小比特30 分钟前
C语言内存布局
c语言·const·内存布局
Bigan(安)3 小时前
【奶茶Beta专项】【LVGL9.4源码分析】09-core-global全局核心管理
linux·c语言·mcu·arm·unix
前端小白在前进3 小时前
⭐力扣刷题:螺旋矩阵
算法·leetcode·矩阵