链表球环路的问题经常出现在面试题中,希望通过下面的解释能偶掌握这几个问题。
问题:
1、如何判断一个链表是不是这类链表?
2、如果链表为存在环,如何算环的长度?
3、如果链表为存在环,如何算柄的长度?
问题:
1、如何判断一个链表是不是这类链表?
2、如果链表为存在环,如何算环的长度?
3、如果链表为存在环,如何算柄的长度?
第一问是否有环就用快慢指针,fast=fast->next-next,slow=slow->next;代码如下
bool IsExitsLoop(slist *head)
{
slist *slow = head, *fast = head;
while ( fast && fast->next )
{
slow = slow->next;
fast = fast->next->next;
if ( slow == fast ) break;
}
return !(fast == NULL || fast->next == NULL);
}这样就可以判断是否有环路
第二问
首先引入一个图,


本文介绍了如何使用快慢指针判断链表是否存在环,并详细阐述了如何计算环的长度以及链表的柄(环外部分)长度。通过两次相遇点的不同分析,得出计算环长和柄长的算法。
最低0.47元/天 解锁文章
1073

被折叠的 条评论
为什么被折叠?



