【发布时间】:2012-08-08 05:00:52
【问题描述】:
我试图找到一个单链表的循环开始点。 我想到的是用 2 个指针 *慢,*快,一个以两倍于另一个的速度移动。 如果列表有循环,那么在某个时候
5-6-7-8
| |
1-2-3-4-7-7
慢=快
能否有另一种优雅的解决方案,使列表只遍历一次?
【问题讨论】:
-
遍历列表,计算节点数,中点=节点数/2四舍五入到最接近的int
-
@peacemaker 你仍然需要遍历列表直到中点。
-
@peacemaker:这将是一个半遍历。
-
中点与列表中的循环有什么关系?你想找到循环的开始吗?
-
@peacemaker:当然,您已经找到了中点的索引,但是您必须访问它。在链表的情况下,这意味着再次遍历链表的前半部分。链表的访问时间为 O(n)。
标签: c data-structures hyperlink singly-linked-list