美文网首页
Linked-list-cycle

Linked-list-cycle

作者: gattonero | 来源:发表于2019-02-25 14:14 被阅读0次

    问题

    判断链表中是否有环,如果有,找出链表中环的起始节点

    解决

    首先找出环的话可以用快慢节点法,快节点的速度是2,慢节点是1
    因为两个节点进入环后,快节点会以2-1=1的速度接近慢节点,所以如果有环的话,两节点一定会相遇,否则快节点会先到链尾

    接下来就是寻找环的起始节点,根据下图我们有:

    示意图

    2(t+x)=t+x+n(x+y)
    t=(n-1)(x+y)+y
    x+y就是环的长度,换句话说,t就是环长的整数倍+y,那么我们在快慢节点相遇后,再设置一个慢节点到链头,他们第一次相遇的时候,一定在t处,也就是环节点了

    相关文章

      网友评论

          本文标题:Linked-list-cycle

          本文链接:https://www.haomeiwen.com/subject/fgzwyqtx.html