Linknode * createLink( int n )
{
int xValue;
Linknode *head,*p,*pre;
cout<<"請輸入第1個數字: ";
cin>>xValue;
p=(Linknode*)malloc(sizeof(Linknode));
//p=new Linknode;
p->data=xValue;
p->next=NULL;
head=p;
pre=p;
for(int i=1;i<n;i++)
{
cout<<"請輸入第"<<i+1<<"個數字: ";
cin>>xValue;
p=(Linknode*)malloc(sizeof(Linknode));
p->data=xValue;
if(i==n-1)
{
/*cout<<"已經組成一個環了!"<<endl;*/
p->next=head->next;
}
else
{
p->next=NULL;
}
pre->next=p;
pre=p;
}
//printLink(head);
return head;
}Linknode * findFirstCycleNode( Linknode *head )
{
assert(head!=NULL&&head->next!=NULL);
Linknode *pStart,*pCur;
pCur=head;
int nCur=0,nStart;
//檢查每一個結點,若是 null退出,不是一個環。
while(pCur!=NULL)
{
pStart=head;
nStart=0;
while(pStart!=NULL)
{
if(pStart==pCur)
{
if(nStart==nCur)
{
break;
}
else //找到環的入口處了。
{
cout<<"找到了,在第"<<nStart+1<<"節點處"<<endl;
return pStart;
}
}
nStart++;
pStart=pStart->next;
}
nCur++;
pCur=pCur->next;
}
cout<<"該鏈表不是一個環!"<<endl;
return NULL;
}Linknode * findFirstCycleNode2( Linknode *head )
{
assert(head!=NULL&&head->next!=NULL);
set<Linknode*> addLinkNode;
Linknode *pCur=head;
while(pCur!=NULL)
{
if(addLinkNode.find(pCur)==addLinkNode.end())
{
addLinkNode.insert(pCur);
pCur=pCur->next;
}
else
{
cout<<"該鏈表是一個環!"<<endl;
return pCur;
}
}
cout<<"該鏈表不是一個環!"<<endl;
return NULL;
}測試代碼
Linknode *headNode;
int n;
cout<<"請輸入創建的鏈表的長度"<<endl;
cin>>n;
headNode=createLink(n);
//findFirstCycleNode(headNode);
findFirstCycleNode2(headNode);