LeetCode | 141. 环形链表

简介: LeetCode | 141. 环形链表

LeetCode | 141. 环形链表

OJ链接


思路:

这里我们可以使用快慢指针来解决问题


  • slow一次走两步
  • fast一次走一步
  • 当slow和fast相遇的时候就说明带环,否则就是否

代码如下:

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

那么有几个问题

  • slow一次走1步,fast一次走两步,一定会相遇吗?
  • slow进环后,fast和slow的距离变化,每次追击距离缩小1,距离为0的时候就追上了~~
  • slow一次走1步,fast一次走三步,一定会相遇吗?
  • 如果N是偶数直接就追上了
  • 如果N是奇数,C是奇数,第一轮错过了,第二轮就追上了
  • 如果N是奇数,C是偶数,就永远追不上~~
  • 这里反转来了,那么N是奇数,C是偶数时就追不上,这个条件是否成立?请证明!
  • 结果是条件不成立~~

证明:

  • 如果N是偶数直接就追上了
  • 如果N是奇数,C是奇数,第一轮错过了,第二轮就追上了
  • 如果N是奇数,C是偶数,就永远追不上
  • 2L = n * C -N
  • 偶数 = n * 偶数 - 奇数 ---->永远追不上的条件是不成立的
  • slow一次走n步,fast一次走m步,一定会相遇吗?m>n>1
  • 这个问题和上一个问题很相似
  • 距离缩小m-n(>=1的整数)N%(M-N) == 0
相关文章
|
20天前
|
Java
环形数组链表(java)
环形数组链表(java)
10 0
|
14天前
|
Java
力扣经典150题第五十八题:合并两个有序链表
力扣经典150题第五十八题:合并两个有序链表
14 2
|
14天前
|
Java
力扣经典150题第六十题:反转链表 II
力扣经典150题第六十题:反转链表 II
10 1
|
14天前
|
存储 Java
力扣经典150题第五十九题: 随机链表的复制
力扣经典150题第五十九题: 随机链表的复制
12 1
|
28天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
18 2
|
1月前
|
Java Python
二刷力扣--链表
二刷力扣--链表
|
1月前
|
存储 算法 数据可视化
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
|
14天前
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
10 0
|
20天前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
8 0
|
20天前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题