Tuesday, July 22, 2008

Given a singly linked list, determine whether it contains a loop or not.

//Find looping node
NODE* FindLoopingNode(NODE *pHead)
{
if (NULL == pHead)
return NULL;

NODE *pTemp = pHead;
NODE *pTemp1 = pHead;

do
{
//pTemp = pTemp->pNext;
pTemp = pTemp->pNext;

//pTemp1 = pTemp1->pNext->pNext;
pTemp1 = pTemp1->pNext;

if (NULL == pTemp1)
return NULL; //No loop found

pTemp1 = pTemp1->pNext;

if (NULL == pTemp1)
return NULL; //No loop found
}
while (pTemp != pTemp1);

return pTemp; //return the looping node
}

0 comments: