原题是这样,要求是,返回带有环形单链表的环的第一个节点。。在不改变程序框架的基础上改错。。
- LinkedList* IsCyclicLinkedList (LinkedList* pHead)
- {
- LinkedList* pCur;
- LinkedList* pStart;
- while (pCur != NULL)
- {
- for ( ; ; )
- {
- if (pStart == pCur->next)
- return pStart;
- pStart = pStart->next;
- }
- pCur = pCur->next;
- }
- return pStart;
- }
我上网找了各种博客看。。感觉没有一个是对的,于是我就自己写了一个时间复杂度非常高的。。。不过基本不改变原程序框架。。我加了一个快慢链表来避免死循环。。但是时间复杂度o(2*n^2)也就是0(n^2)。。惨不忍睹。。欢迎大牛指导。
LinkedList* IsExitLoop(LinkList *head)
{
LinkedList *pCur;
LinkedList * pStart = pHead;
while(pStart != NULL)
{
pCur = pStart->pNext;
pCurfast = pCur->pNext;
int times = 0;
for(;pCur!=NULL && times<2;)
{
if(pStart == pCur->pNext)
return pStart;
if(pCur == pCurfast)
times ++;
pCur = pCur->pNext;
pCurfast = pCurfast->pNext->pNext;
}
pStart = pStart->pNext;
}
return pStart;
}