zoukankan      html  css  js  c++  java
  • 单链表找环(floyd算法)

    单链表找环(floyd算法)

    首先是示意图,链表中有环就是这种情况

    问题是,在这样一个单链表中,若有环,寻找出环的入口

    floyd算法是怎么做的呢?

    1. 快慢指针,同时从起点开始走。

    1. 设环路长度为l, 则当

    [2t - t = kl(k是整数) ]

    时,快人和慢人相遇。

    1. 这时我们并不知道相遇点在哪里,只知道它一定在环上。不过观察相遇条件那个式子,可得

    [t = kl ]

    而,(t) 又等于慢人走过的总路程,慢人走过的总路程又可以分解成环外的部分和环上的部分。

    1. 这样的总路程是环长的倍数,那是不是

    慢人当前位置往前走“环外部分”步,换言之,把环外部分移动到环内

    这样,就得到了一段从环入口开始,且长度为环长倍数的路程,这样的路程,终点仍然在环的入口。

    1. 那么,怎么样才能做到呢?

    很简单,引入第三个人,让他和慢人同时从起点开始走,当他走了“环外部分”步后,一定会和慢人在环路入口相遇。

    这样就找到了问题的答案。

  • 相关阅读:
    composer 版本号前置~与^符号的区别
    阿里巴巴离线数据同步工具/平台datax安装、使用笔记
    LAMP集成环境搭建
    MySQL在Windows中设置环境变量
    jQuery 事件
    jQuery 属性,元素
    jQuery 选择器
    JavaScript 动画
    JavaScript BOM-三剑客
    JavaScript BOM-对象
  • 原文地址:https://www.cnblogs.com/agnes6/p/13786013.html
Copyright © 2011-2022 走看看