链表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月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
25 7
|
1月前
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
27 0
|
4月前
【数据结构OJ题】环形链表
力扣题目——环形链表
37 3
【数据结构OJ题】环形链表
|
4月前
【数据结构OJ题】复制带随机指针的链表
力扣题目——复制带随机指针的链表
51 1
【数据结构OJ题】复制带随机指针的链表
|
4月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
30 1
【数据结构OJ题】环形链表II
|
4月前
【数据结构OJ题】相交链表
力扣题目——相交链表
32 1
【数据结构OJ题】相交链表
|
4月前
【数据结构OJ题】链表分割
牛客题目——链表分割
32 0
【数据结构OJ题】链表分割
|
4月前
【数据结构OJ题】链表的回文结构
牛客题目——链表的回文结构
39 0
【数据结构OJ题】链表的回文结构
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
5月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表