判断链表是否有环

判断链表是否有环,目前有两种主流的方法,一种是设置两个指针,一个步进量是1,另一个步进量是2,如果存在环,则步进量为2的指针一定能追赶上步进为1的指针,即在某一时刻它们的地址相同,代码如下:

bool check(const node* head)
{
if(head==NULL) return false;
node
*low=head, *fast=head->next;
while(fast!=NULL && fast->next!=NULL)
{
low
=low->next;
fast
=fast->next->next;
if(low==fast)
return true;
}
return false;
}
另一种方法是遍历链表,没遍历一个节点,就给这个节点计数,如果某节点入度超过1,则说明链表有环。但是如果链表结构本身没有存储入度的空间,则需要辅助存储空间。例如可以用哈希表保存节点地址和入度的映射,但这需要O(n)的辅助存储空间

posted on 2011-07-05 10:37  Kadin Zhu  阅读(332)  评论(0编辑  收藏  举报