编程题目:
Q1.怎么判断链表中是否有环?(该链表不一定是循环单链表或双链表。)
答:设置2个指针追逐
解法1:
bool CircleInList(Link* pHead)
{
if(pHead == NULL || pHead->next == NULL)//无节点或只有一个节点并且无自环
{
return (false);
}
if(pHead->next == pHead)//自环
{
return (true);
}
Link *pTemp1 = pHead;//step 1
Link *pTemp = pHead->next;//step 2
while(pTemp != pTemp1 && pTemp != NULL && pTemp->next != NULL)
{
pTemp1 = pTemp1->next;
pTemp = pTemp->next->next;
}
if(pTemp == pTemp1)
{
return (true);
}
return (false);
}
解法2:
bool CircleInList(Link* pHead)
{
if(pHead == NULL)return false;
Link *pTemp;
Link *pTemp2 ;
int i,j;
for(i=0,pTemp = pHead;pTemp;i++, pTemp=pTemp->next)
{
for(j=0,pTemp2 = pHead;j<i;j++,pTemp2 = pTemp2 ->next)
{
if(pTemp2 == pTemp)return true;
}
}
return false;
}