博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
环形链表第一个入环节点 NC3
阅读量:4128 次
发布时间:2019-05-25

本文共 898 字,大约阅读时间需要 2 分钟。

 思路:快慢指针

1)首先判断是否有环,有环时,返回相遇的节点,无环,返回null

2)有环的情况下,求链表的入环节点。慢指针一次走一个步长,快指针一次走两个步长)第一次相遇的地方为相聚点(证明有环)。

   fast再次从头出发,每次走一步,

   slow从相遇点出发,每次走一步,

   再次相遇即为环入口点。

证明:

快指针与慢指针均从X出发,在Z相遇。此时,慢指针行使距离为a+b,快指针为a+b+n(b+c)。

所以2*(a+b)=a+b+n*(b+c),推出

a=(n-1)*b+n*c=(n-1)(b+c)+c;

得到,将此时两指针分别放在起始位置和相遇位置,并以相同速度前进,当一个指针走完距离a时,另一个指针恰好走出 绕环n-1圈加上c的距离。

代码:

//环形链表第一个入环节点//给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。var detectCycle = function(head) {    if(!head || !head.next)         return null    let slow = head;    let fast = head;    while(fast != null && fast.next != null) {  //while(fast && fast.next) {        slow = slow.next;        fast = fast.next.next;        if(slow == fast) {            fast = head;  // 有环,fast重新回到链表头            while(slow != fast) {  // slow和fast重新相遇时,相遇节点就是入环节点                slow = slow.next;                fast = fast.next;            }            return slow        }    }    return null};

 

转载地址:http://pnuvi.baihongyu.com/

你可能感兴趣的文章
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>