链表有环找入口的问题
2016-05-17 15:35
288 查看
之前遇到过这个问题,记得方法是先分别用两个快、慢指针,让他们在环中相遇,然后一个从头结点,一个从相遇点,都一次走一步,相遇点即为入口点。
但是关于这个结论的证明,看了网上好几个博客,感觉都说的不够清晰,印象中有一篇讲得还不错,还算理解了它的思想,今天做题时想要去搜结果搜不到了。
这里写下我自己的一点理解:
其中p点为快慢指针的相遇点。
下面要证明的问题是,一个指针从p点开始,另一个指针从head开始,一定会在q点(入口点相遇)。
首先根据p是快慢指针的相遇点:
2(l1+s)=l1+s+kl2,其中k=1,2,3,...
移项得:l1=(k−1)l2+l2−s
其物理含义就是说从head开始到入口点的距离,和从p点开始在环上走n(n=0,1,2,...)圈再加上p到入口点的距离相等。
其证明就是这么简洁,其实就是数学等式的一个简单变形,然后用物理解释其含义。
但是关于这个结论的证明,看了网上好几个博客,感觉都说的不够清晰,印象中有一篇讲得还不错,还算理解了它的思想,今天做题时想要去搜结果搜不到了。
这里写下我自己的一点理解:
其中p点为快慢指针的相遇点。
下面要证明的问题是,一个指针从p点开始,另一个指针从head开始,一定会在q点(入口点相遇)。
首先根据p是快慢指针的相遇点:
2(l1+s)=l1+s+kl2,其中k=1,2,3,...
移项得:l1=(k−1)l2+l2−s
其物理含义就是说从head开始到入口点的距离,和从p点开始在环上走n(n=0,1,2,...)圈再加上p到入口点的距离相等。
其证明就是这么简洁,其实就是数学等式的一个简单变形,然后用物理解释其含义。
相关文章推荐
- [C/C++]反转链表
- 关于指针的一些事情
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C# Pointer指针应用实例简述
- C++智能指针实例详解
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- C++编程指向成员的指针以及this指针的基本使用指南
- 详解C++中的指针、数组指针与函数指针
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++中字符串以及数组和指针的互相使用讲解
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#通过指针实现快速拷贝的方法
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统