转自:http://www.cnblogs.com/marrywindy/archive/2010/10/29/1864067.html
代码
/*
purpose:实现链表的几种操作
*/
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
struct SNode
{
int ivalue;
struct SNode* next;
};
/************************************************************************/
/* Tail insert */
/************************************************************************/
SNode* createLinkList()
{
SNode* head,*s,*p;
int ix;
char ch;
head=(SNode*)malloc(sizeof(struct SNode));
if(NULL==head)
exit(1);
head->next=NULL;
p=head;
while (scanf_s("%d",&ix)==1)
{
s=(SNode*)malloc(sizeof(struct SNode));
if(NULL==s)
exit(1);
s->ivalue=ix;
p->next=s;
p=s;
}
p->next=NULL; //No loop
//p->next=head; //Loop linklist
return head;
}
/************************************************************************/
/* print */
/************************************************************************/
void printLinkList(SNode* pNode)
{
if(NULL==pNode)
exit(1);
SNode* p;
p=pNode->next;
//while (p!=pNode) //Loop
while(p!=NULL) //No loop
{
printf("%d ",p->ivalue);
p=p->next;
}
printf("\n");
}
/************************************************************************/
/* IsLoop */
/************************************************************************/
bool IsLoop(SNode* pNode)
{
SNode* p=pNode;
SNode* q=pNode;
while (q!=NULL && q->next!=NULL)
{
p=p->next;
q=q->next->next;
if (p==q)
return true;
}
return false;
}
int main()
{
SNode* sNode;
sNode=createLinkList();
printLinkList(sNode);
bool im=IsLoop(sNode);
if(im)
printf("true\n");
else
printf("false\n");
return 0;
}