判断一个单向链表是否有环,算法证明
2008-04-21 21:34
295 查看
判断一个单向链表是否有环:
给定链表的头指针:list *head。
步长法:
int looplist(list *head)
证明步长法的正确性:
如果链表有环,不妨假设其环长度为M(>=2)。
p指针首次到达交点(N0)时,q指针已经进入环。
设p=0;q=q-p;
再进过i(i>=0)步后,p=(p+i)%m;q=(q+2*i)%m;
则必存在一个i使得(p+i)%m = (q+2*i)%m。(p,q 都为常数)。
延伸:
给你一个单向链表的头指针,可能最后不是NULL终止,而是循环链表。怎么找出这个链表循环部分的第一个节点。
解决思路:
加入一个数组记录p指针移动痕迹,第一次重复处即是第一个循环节点。
给定链表的头指针:list *head。
步长法:
int looplist(list *head)
证明步长法的正确性:
如果链表有环,不妨假设其环长度为M(>=2)。
p指针首次到达交点(N0)时,q指针已经进入环。
设p=0;q=q-p;
再进过i(i>=0)步后,p=(p+i)%m;q=(q+2*i)%m;
则必存在一个i使得(p+i)%m = (q+2*i)%m。(p,q 都为常数)。
延伸:
给你一个单向链表的头指针,可能最后不是NULL终止,而是循环链表。怎么找出这个链表循环部分的第一个节点。
解决思路:
加入一个数组记录p指针移动痕迹,第一次重复处即是第一个循环节点。
相关文章推荐
- 判断一个单向链表中是否存在环
- 判断一个单向链表是否有环和判断一个单向链表是否是循环链表
- 如何判断一个单向链表是否有环路
- 判断一个单向链表是否形成了环状结构
- 判断一个单向链表中是否有环
- 判断一个单向链表中是否有环
- 如何判断一个单向链表是否存在循环的经典方法
- 判断一个单向链表是否有环和判断一个单向链表是否是循环链表
- C++数据结构与算法之判断一个链表是否为回文结构的方法
- 算法:判断一个链表中是否有环
- 判断一个单向链表中是否有环
- 判断一个单向链表是否有环和判断一个单向链表是否是循环链表
- 百度笔试算法第二题:如何判断两个单向链表是否有相交,并找出交点
- 判断一个单向链表中是否有环
- 如何判断一个单向链表是否为回文链表(Palindrome Linked List)
- 状下算法可以判断一个单向链表中是否有环
- 判断一个单向链表中是否存在环
- 判断一个正整数是否是2的N次方的简洁算法及其证明
- 剑指offer面试题15——扩展2:判断一个单向链表是否形成环结构
- 判断一个单向链表是否有环