【数据结构OJ题】环形链表

简介: 力扣题目——环形链表

1. 题目描述

image.png

2. 思路分析

整体思路:定义快慢指针fast,slow,如果链表确实有环,fast指针一定会在环内追上slow指针

即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。
image.png

我们简化一下这个问题,用一个线段表示前面的不带环部分的链表,用一个圆圈表示带环部分的链表 。
image.png
image.png

slow一次走1步,fast一次走2步,一定能追上吗?(这里的走的步数可以理解成跳格子)

一定可以追上!

当slow进环以后,fast开始追及slow,假设入环时,它们之间的距离是N。每追及1次,它们之间的距离缩小1。当它们之间的距离为0时,就追上了。

扩展:

slow一次走1步,fast一次走3步,一定能追上吗?

当slow进环以后,fast开始追及slow,假设入环时,它们之间的距离是M。每追及1次,它们之间的距离缩小2。我们假设环的周长是C,这时我们就要分类讨论了:
image.png

由此我们可以知道,得看距离M和环的周长C的大小来具体情况具体分析!

那么如果slow一次走1步,fast一次走4步呢?

当slow进环以后,fast开始追及slow,假设入环时,它们之间的距离是K。每追及1次,它们之间的距离缩小3。我们假设环的周长是C,这时我们就要分类讨论了:
image.png
由此我们可以知道,得看距离K和环的周长C的大小来具体情况具体分析!

3. 代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
   
    struct ListNode *fast=head,*slow=head;
    while(fast&&fast->next)
    {
   
        fast=fast->next->next;
        slow=slow->next;
        if(slow==fast)
            return true;
    }
    return false;
}

image.png

相关文章
|
16天前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
44 4
|
18天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
18天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
26 7
|
1月前
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
16 0
数据结构与算法学习五:双链表的增、删、改、查
|
16天前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
37 0
|
1月前
|
存储
[数据结构] -- 双向循环链表
[数据结构] -- 双向循环链表
21 0
|
1月前
|
存储
探索数据结构:便捷的双向链表
探索数据结构:便捷的双向链表
|
1月前
|
存储
探索数据结构:单链表的实践和应用
探索数据结构:单链表的实践和应用
|
1月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
19 0

热门文章

最新文章