检查链表是否有环,带数学推导
来源:互联网 发布:iphone手机数据恢复 编辑:程序博客网 时间:2024/04/29 09:30
博客已经搬家!请前往http://gqqnbig.me/?p=181 阅读本文。
推导
给定下列列表(4指回2),若有快慢两个指针,慢指针每次前进一步,快指针每次前进两步,求两指针何处相遇?
1-2-3-4 |___|
解:
设两指针前进n次。n必定大于等于1。
In[1]:=Out[1]:=
然后寻找满足上述条件(Out[1])的最小的n。
In[2]:=Out[2]:=
所以n=3,即slow、fast两指针在4处相遇。
一般化:给定一个单链表,前面非循环部分有a个节点(长度为a),后面循环部分有l个节点(长度为l)。求快慢两指针走多少次后相遇?
同理,设前进n次后相遇。(n>a)
快指针的位置=慢指针的位置
公式1是同余表达式,读作2n-a和n-a在模l下同余,
所以n是l的倍数。n不一定等于l,因为n必须大于a,而a与l的关系未知。
因为
能否求出l的具体值呢?答案是可以的。根据GoCalf[2],两指针相遇后,快指针暂停慢指针继续走,两指针第二次相遇时,慢指针走的次数就是环长。
求环长
给定任意带环链表,快慢指针相遇时走的次数为该带环链表的环长。
求非循环长度
已知环长后,可以求非循环部分的长度a。
获取甲乙两个慢指针,甲先走l次,然后甲乙一起走。因为甲乙步长相同,他们之间始终保持l的差距。当乙第一次进入循环节时,由于甲乙差距为l,l为循环节长度,所以甲跟乙相遇。这时乙所走的步数就是a。
- 检查链表是否有环,带数学推导
- 检查链表是否有环?
- 检查链表是否有环
- 检查链表是否有环
- 检查单链表中是否有环
- 单链表的所有操作,检查是否有环,合并链表,逆置链表,排序链表......
- 检查是否有汉字
- Android 检查是否有网络
- 检查是否有网络工具类
- 链表是否有环
- 链表是否有环
- 如何检查一个单向链表上是否有环?
- 如何检查一个单向链表上是否有环?
- 如何检查一个单向链表上是否有环?
- 如何检查一个单向链表上是否有环?
- 如何检查一个单向链表上是否有环?
- 如何检查一个单向链表上是否有环?
- 如何检查一个单向链表上是否有环?
- 用Eclipse写WebDriver驱动selenium测试问题处理方法
- Android Volley框架支持https请求
- 2015年工作规划
- python在线文档
- java开发webservice的几种方式
- 检查链表是否有环,带数学推导
- Java内部类
- PullToRefreshScrollView隐藏刷新布局(使刷新布局不显示)
- java并发-记一次统计变量值偏差问题
- 癫痫病应该注意什么
- TabHost基本实现(三)
- 黑马程序员——java基础——文件File
- 捷易通话费充值招代理加QQ398677951
- postgresql 备忘