判断一个链表是否为循环单链表:
#设置两个指针(fast, slow),slow步长为1,fast步长为2,
大概的思路如下:
如果链表为循环单链表,则fast与slow必定相遇。
如果链表不为循环单链表,则fast必定先指向NULL。
int IsLoopList(list *head)
{
list *s = head->next; //慢指针
list *f = head->next->next; //快指针
if ((NULL == head) || (NULL == head->next))
{
return -1;
}
while ((s != NULL) && (f != NULL) && (f->next != NULL))
{
if (s == f)
{
return 0; //是循环单链表
}
s = s->next;
f = f->next->next;
}
return -1;
}

本文介绍了一种通过快慢指针来判断单链表是否为循环链表的方法。使用两个指针,一个快指针每次移动两步,一个慢指针每次移动一步。如果是循环链表,快慢指针最终会相遇;如果不是,则快指针会先到达链表尾部。
3519

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



