当前位置:   article > 正文

经典环形链表的思路和结论_环形链表 思路数学论证

环形链表 思路数学论证

以题引理

题·一

思路·快慢指针

在这里插入图片描述

class Solution {
public:
    bool hasCycle(ListNode *head) {
        struct ListNode* slow,*fast=head;
        while(fast && fast->next) {
            slow=slow->next;
            fast=fast->next->next;
            if(slow ==fast) {
                return true;
            }
        }
        return false;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

提升·延申

证明·1

  1. 条件:slow指针和fast指针同时从链表的开始位置出发,slow每次走一步,fast每次走两步。为什么slow和fast一定会在环中相遇?会不会在环里面错过,永远遇不上?请证明一下结论
    • 结论:他们一定会相遇。

在这里插入图片描述

证明·2

  1. 为什么slow走一步,fast走的两步呢?能不能fast走一次走n步(n>2)?请证明一下结论
    • 结论:fast一次走n步?n>2不一定会相遇。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

题目·二

在这里插入图片描述

结论·入口相遇定理【自己瞎起的】

  • 让一个指针从列表起始位置开始遍历链表。同时让一个指针从判环相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。

证明·结论

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/64509
推荐阅读
相关标签
  

闽ICP备14008679号