您的位置:首页 > 其它

Linked List Cycle II

2014-09-15 12:19 393 查看
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Follow up:

Can you solve it without using extra space?

这个需要传说中的定理:

慢指针从快指针和慢指针第一次相遇的位置开始移动,另一个指针从head开始移动,两者相遇的点即为环入口。

相关证明参考site:环的连接点

代码如下:
ListNode *detectCycle(ListNode *head) {
ListNode *one = head, *second = head, *ptr = head;

while( second && second->next )
{
one = one->next;
second = second->next->next;
if( one == second )
{
while( one != ptr )
{
one = one->next;
ptr = ptr->next;
}
return ptr;
}
}
return NULL;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: