代码:
void CreateLoop(List plist)
{
Node *p = plist;
for(;p->next != NULL;p = p->next)
{
;
}
p->next = plist->next->next;
}
bool isLoop(List plist)
{
Node *pf = plist;
Node *ps = plist;
while(pf != NULL && pf->next != NULL)
{
pf = pf->next->next;
ps = ps->next;
if(pf == ps)
{
break;
}
}
if(pf == NULL || pf->next == NULL)
{
return false;
}
else
{
return true;
}
}
Node *EnterNode(List plist)
{
Node *pf = plist;
Node *ps = plist;
while(pf != NULL && pf->next != NULL)
{
pf = pf->next->next;
ps = ps->next;
if(pf == ps)
{
break;
}
}
if(pf == NULL || pf->next == NULL)
{
return NULL;
}
ps = plist;
while(pf != ps)
{
pf = pf->next;
ps = ps->next;
}
if(pf == ps)
{
return ps;
}
return NULL;
}
int LengthLoop(List plist)
{
Node *pf = plist;
Node *ps = plist;
int len = 0;
bool First = false;
bool Second = false;
while(pf != NULL && pf->next != NULL)
{
pf = pf->next->next;
ps = ps->next;
if(pf == ps && Second == true)
{
break;
}
if(pf == ps && Second == false)
{
First = true;
Second = true;
}
if(Second == true)
{
len++;
}
}
return len;
}
int main()
{
Node head;
InitList(&head);
for(int i = 0;i < 10;i++)
{
Insert_head(&head,i);
}
Show(&head);
CreateLoop(&head);
if(isLoop(&head))
{
printf("is Loop!!\n");
}
else
{
printf("is not Loop!!\n");
}
Node *p = EnterNode(&head);
printf("%d\n",p->data);
int len = LengthLoop(&head);
printf("Looplen == %d\n",len);
return 0;
}