Given a linked list, determine if it has a cycle in it.
Follow up:
can you solve it without using extra space?
最初代码,错误内容已写明:
bool solution( ListNode *head )
{
ListNode *one = head, *second = head;
//就这一行而言,对于{1->NULL} 或{}应为no cycle,导致出错
if( head == NULL || head->next == NULL )
return true;
while( one && second )
{
//对于{1->2->NULL} 这样的,应为no cycle,
//但one和second先呗判断才赋值,导致死循环。
//为了保证second->next->next不非法访问,只需确保second->next不为NULL即可。
if( one->next )
one = one->next;
if( second->next->next )
second = second->next->next;
if( one == second )
return true;
}
return false;
}
修改后:
bool hasCycle(ListNode *head) {
ListNode *one = head, *second = head;
while( one && second && second->next )
{
one = one->next;
second = second->next->next;
if( one == second )
return true;
}
return false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)