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;
}
相关推荐
Bluetooth7301 小时前
c语言一维数组
c语言
QiLinkOS2 小时前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
小白兔奶糖ovo3 小时前
【Leetcode】231. 2的幂
linux·算法·leetcode
过期动态4 小时前
【LeetCode 热题 100】接雨水
java·数据结构·算法·leetcode·职场和发展
一抹晴空4 小时前
Keil MDK AC6 compiler编译报错,与AC5区别
c语言·arm开发·单片机
czhaii6 小时前
单片机伺服电机加减速控制子程序
c语言·单片机
qq_333120976 小时前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++
luj_17687 小时前
残熵算法的稳健防灾逻辑
c语言·开发语言·c++·经验分享·算法
QiLinkOS7 小时前
从技术到资产的跃迁:企业专利布局的深层逻辑
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源
山上三树8 小时前
C/C++ 高频报错速查表(开发通用版)
c语言·开发语言·c++