博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找到链表中环的起始点
阅读量:6617 次
发布时间:2019-06-25

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

以前想了好几次没想明白,早上拿笔纸一画就看出来了;

设置slow,fast两个指针,slow每次移动一步,fast每次移动两步;若fast结束前与slow重合则说明有环,若未重合即结束则说明没有环;

第一次重合时,假设从head到环起始位置距离为k,slow移动了n步,则slow在环中移动了n-k步,fast在环中移动了2n-k步;距离差n为环长度的倍数;

所以slow再移动k步将到达环的起始位置;这时再从head出发一个finder指针,移动k步恰好也到了环的起始位置,所以当slow==finder的位置即为所求;

代码:

1     public ListNode detectCycle(ListNode head) { 2         if(head == null) return null; 3         ListNode fast = head; 4         ListNode slow = head; 5         do{ 6             slow = slow.next; 7             fast = fast.next; 8             if(slow==null || fast==null) return null; 9             fast = fast.next;10             if(fast==null) return null;11         }while(fast != slow);12         13         ListNode finder = head;14         while(finder != slow){15             finder = finder.next;16             slow = slow.next;17         }18         return finder;19     }

 

转载于:https://www.cnblogs.com/ibuki/p/4836275.html

你可能感兴趣的文章
数据库创建好之后如何创建scott用户
查看>>
关于RichTextBox字体的问题
查看>>
EBS销售订单挑库发放处理程序
查看>>
APP的内部多语言配置
查看>>
sql 查询表的字段数量
查看>>
POJ-2965 The Pilots Brothers' refrigerator---思维题
查看>>
crontab报错
查看>>
docker内存限制
查看>>
动态大小的图片上的超链接
查看>>
总结一下常用的排序,冒泡排序,选择排序,快速排序
查看>>
Sql Server系列:系统函数
查看>>
php5.5 yum源
查看>>
samsungGalaxyS4USB驱动
查看>>
SDN第三次作业
查看>>
java第二次实验作业
查看>>
Wannafly挑战赛4 A解方程【二分/set/hash求解方程】
查看>>
CF978E Bus Video System【数学/前缀和/思维】
查看>>
543. Diameter of Binary Tree【Easy】【二叉树的直径】
查看>>
Analog Clock Window Example
查看>>
Python基础--函数初识
查看>>