【Floyd的慢速指针和快速指针方法如何工作()】我们已经在以下文章中讨论了Floyd的快慢指针算法检测链表中的循环.
文章图片
该算法是从链表的开头开始两个指针, 分别是慢速和快速。我们一次移动一个慢节点, 一次快速移动两个节点。如果有一个循环, 那么他们一定会见面的。此方法之所以有效, 是因为以下事实。
1)当慢速指针进入循环时, 快速指针必须位于循环内部。令快指针为慢指针的距离k。
2)现在, 如果考虑慢速和快速指针的移动, 我们可以注意到它们之间的距离(从慢速到快速)在每次迭代后增加一。经过一个迭代(慢=慢的下一个和快速=下一个快的下一个), 慢和快之间的距离变为k + 1, 经过两次迭代, k + 2, 依此类推。当距离变为n时, 它们会合, 因为它们以长度n的周期运动。
例如, 我们可以在下图中看到, 初始距离为2。经过1次迭代, 距离变为3, 经过2次迭代, 距离变为4。经过3次迭代, 它变为距离0的5。它们相遇。
文章图片
循环删除算法如何工作?
请参阅的方法3
检测并删除链接列表中的循环
推荐阅读
- Google如何使用机器学习(机器学习的应用例子)
- DHCP服务器如何为主机动态分配IP地址()
- 冠状病毒爆发如何结束(使用数据结构可视化)
- 动态数组是如何工作和实现的()
- 热备路由器协议(HSRP)和虚拟路由器冗余协议(VRRP)介绍
- 算法题(Hosoya三角形介绍和代码实现)
- Hopcroft–Karp最大匹配算法S2(代码实现)
- Haproxy配合Nginx搭建Web集群
- LVM与磁盘配额