简单并带有错误的环形单链表检测代码:
/*判断一个单链表是否有环,如果有,则把指向环开始的指针返回;如果没有,则返回NULL*/
LinkedList* IsCyclicLinkedList(LinkedList* pHead)
{
LinkedList* pCur;
LinkedList* pStart;
while (pCur != NULL)
{
for (; ; )
{
if (pStart == pCur -> pNext)
return pStart;
pStart = pStart -> pNext;
}
pCur = pCur -> pNext;
}
return pStart;
}
要求在尽量保持原程序框架的基础上,修改这个程序,以得到正确的结果。
先改错:
1. 没有初始化pCur
和pStart
。
2. for循环的意图应当是在确定环的结束位置之后,再去找到环的起点。
按照一般解法的话,首先得确定环的长度,然后才能确定环的起点。
而且,内循环必须去掉。这样还能算保持原有框架吗?
这个必须得跟面试官商量了。