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;
}
相关推荐
qq_401700413 小时前
嵌入式C语言设计模式
c语言·开发语言·设计模式
小米4963 小时前
day5:92. 反转链表 II
数据结构·链表
努力学算法的蒟蒻3 小时前
day95(2.24)——leetcode面试经典150
算法·leetcode·面试
“αβ”4 小时前
MySQL数据类型
c语言·数据库·opencv·mysql·数据挖掘·数据类型·数据
二年级程序员4 小时前
一篇文章掌握“树”(上)
c语言·数据结构·算法
菜鸡儿齐4 小时前
leetcode-搜索二维矩阵
算法·leetcode·矩阵
安全不再安全4 小时前
某驱动任意读漏洞分析 - 可用于游戏内存数据读取
c语言·测试工具·安全·游戏·网络安全
Charlie_lll4 小时前
力扣解题-无重复字符的最长子串
后端·算法·leetcode
小付同学呀13 小时前
C语言学习(五)——输入/输出
c语言·开发语言·学习
梦幻精灵_cq13 小时前
学C之路:不可或缺的main()主函数框架(Learn-C 1st)
c语言·开发语言