原文链接:http://bbs.chinaunix.net/viewthread.php?tid=410637
struct list{
int data;
struct list *next;
};
bool has_circle(struct list *head)
{
int i;
T *p = Head, *q = Head;
while ( p != NULL ) {
for ( i = 0; i < STEP1; i ++ ) {
if ( ( p = p->;next ) == NULL )
return FALSE;
}
for ( i = 0; i < STEP2; i ++ ) {
q = q->;next;
}
if ( p == q ) {
return TRUE;
}
}
return FALSE;
}
两个步长选取两个互素的数即可。其中STEP1为2,STEP2为1时耗时最短。
本文介绍了一种使用双指针技术来判断链表中是否存在循环的方法。通过设置快慢两个指针,快指针每次走两步,慢指针每次走一步,如果两者相遇则说明链表存在循环。
1421

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



