链表问题:如何判断一个链表有环,以及环的长度,起始位置。

来源:互联网 发布:苹果网络授权经销商 编辑:程序博客网 时间:2024/05/13 17:11

1. 判断链表是否有环:

采用两个指针,一个每次循环前进一步,一个每次循环前进两步。如果存在环,则一定会相交。否则速度快的指针首先为NULL,或其next为NULL。

2. 环的长度:

从相交点开始,循环一次,直到再次到该相交点。循环次数即为环的长度。

3. 环的起始位置:

若相交点为P,环长度为M。计算head节点到交点的距离,为N。

则有,

P点走M距离回到P点。

head走N距离到P点。

设表头到环起始点的距离为L。

为了让两个指针同时走到环的起始点。让一指针从head节点开始先走N-M距离。则第一个相遇点即为环的起始点。