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;
}
相关推荐
一去不复返的通信er6 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
Xin77010 小时前
LeetCode 79. 单词搜索(DFS 回溯法)
leetcode
Zwawa11 小时前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
c语言·嵌入式·编译器
学逆向的11 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
水饺编程12 小时前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
shehuiyuelaiyuehao12 小时前
算法56,重排链表
数据结构·算法·链表
INGNIGHT14 小时前
440 · 背包问题(三)(无限次数)
算法·leetcode·动态规划
极客 - L U14 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
Tisfy15 小时前
LeetCode 3619.总价值可以被 K 整除的岛屿数目:广度优先搜索BFS
算法·leetcode·bfs·宽度优先
谙弆悕博士16 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室