链表OJ:环形链表

简介: 给你一个链表的头节点 head ,判断链表中是否有环。

题目描述 :

给你一个链表的头节点 head ,判断链表中是否有环。


接口:

bool hasCycle(struct ListNode *head)


示例1:

2986a186f0304f38bd74c3e47a53443f.png

示例2:

7328334371d341a0ab4b863a26fd6f80.png

返回值:

true或false


思路

使用快慢指针:

快的追慢的,如果有环,在相对速度差合适的情况下就可以追得到,返回true,无环就返回false,这里我们采取速度差为1,每一次相对距离接近1,最后快的追上慢的。

实现代码

bool hasCycle(struct ListNode* head) {
    struct ListNode* slow = head;
    struct ListNode* fast = head;
    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if (slow == fast)
        {
            return true;
        }
    }
    return false;
}

该速度差为一,也就是说每次两者的距离都会靠近一,所以一定追得上,那么速度差为n时什么情况我们追不上呢?


当距离差为N,N是偶数,速度差为偶数,追得上。N是奇数,速度差为偶数就会错过,然后错过后两者的相对距离还要再次判断和计算是否为偶数,从而产生了永远也追不上的可能性。速度差为奇数也是同样的道理,这里就体现出速度差为1的好处,他一定追得上,而不用去考虑是否有可能会永远也追不上。

目录
相关文章
|
1天前
数据结构——链表OJ题
数据结构——链表OJ题
|
1天前
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
|
1天前
|
索引
【力扣】142. 环形链表 II
【力扣】142. 环形链表 II
|
1天前
|
C语言 C++ 索引
【力扣】141. 环形链表、160. 相交链表、206.反转链表、234. 回文链表
【力扣】141. 环形链表、160. 相交链表、206.反转链表、234. 回文链表
|
1天前
|
算法 C语言 索引
环形链表(快慢指针)
环形链表(快慢指针)
|
1天前
|
算法 索引
LeetCode刷题---142. 环形链表 II(双指针-快慢指针)
LeetCode刷题---142. 环形链表 II(双指针-快慢指针)
|
1天前
|
算法 索引
LeetCode刷题---141. 环形链表(双指针-快慢指针)
LeetCode刷题---141. 环形链表(双指针-快慢指针)
|
1天前
|
算法 Java 索引
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
28 0
|
1天前
|
算法
顺序表、链表相关OJ题(2)
顺序表、链表相关OJ题(2)
|
1天前
|
存储 算法
顺序表、链表相关OJ题(1)
顺序表、链表相关OJ题(1)