Maokt level
获赞
1500
粉丝
70
关注
4
看过 TA
482
西北工业大学
2019
数据分析师
IP属地:河南
暂未填写个人简介
私信
关注
算法思想一:双指针   解题思路:   我们使用两个指针,fast 与 slow。   它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。   图解:      代码展示:   Python版本  class Solution:     def hasCycle(self , head ):        &n...
BiscuitBoy:快慢指针原理说明:1.单向链表中如果有环,一定是最后一个结点的后继指针又指向了已遍历结点(这个已遍历结点可以称为三叉结点,因为该结点有两个入口一个出口),从而形成环。2.因为有环的存在,所以以后继结点非空为条件进行的遍历永远不会停止。3.当慢指针首次到达三叉结点,也就是慢指针开始进入环中时,快指针可能位于环中任一结点处:快指针可能落后慢指针0个结点(快慢指针均位于三叉结点,即刚好相遇)、落后1个结点、2个结点、3个等等,最多落后L-1个节点(L是环中结点总数,即快指针恰位于慢指针的后继结点处)。由于快指针每一跳都比慢指针多前进一个位置,因此,快指针最多也只需要L-1跳就追上慢指针(相遇)。如果是L-1跳后两指针才首次相遇,此时,慢指针刚好来到链表最后一个结点(三叉结点的前驱结点)。因此可以断言:快慢指针首次相遇时,慢指针走过的距离不超过链表的总长度。ps:纯文字描述可能难以理解,可以画图辅助,将三叉结点标记为L号结点,画一个包含L个结点的环即可。
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务