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;
}
相关推荐
晓蛋6 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
傲世仙尊6 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿6 天前
重载、重写(覆盖)、重定义区别
c语言
phltxy6 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
phltxy6 天前
C 语言中的数据存储:从类型到二进制位
c语言
旖旎夜光6 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wuminyu6 天前
HotSpot的轻量锁与膨胀后的ObjectMonitor状态重建原理
java·linux·c语言·jvm·c++
CoderYanger6 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
圣保罗的大教堂6 天前
leetcode 3524. 求出数组的 X 值 I 中等
leetcode
码不停蹄Zzz6 天前
指针用法篇——malloc和free指针详解
c语言