环形链表很曼妙的一个做题思路

首先设置一个fast一个slow,每次fast移动2个next,slow每次一个

假设head到循环节点是a,循环长度是b+c,在b点slow和fast相遇

相遇这个时候有fast走过=2slow走过,2(a+b)=a+k(b+c)+b

平移得到a-c=(k-1)(b+c)

他们必然会在循环中碰到,碰到之后,slow和head每次加一,slow再运动c就到了循环的头头,这个时候head在a-c点再往后移动的同时slow也会循环一个一个的圈数,这个时候就会在循环的头头相遇,所以返回slow就可以,如果slow和fast永远不相碰就会是返回一个none

相关推荐
shehuiyuelaiyuehao2 小时前
算法9,滑动窗口,长度最小的子数组
数据结构·算法·leetcode
计算机安禾2 小时前
【C语言程序设计】第33篇:二级指针与指针数组
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
雨落在了我的手上2 小时前
C语言之数据结构初见篇(6):单链表的介绍(2)
数据结构
DANGAOGAO2 小时前
数据结构复习(持续更新)
数据结构
cui_ruicheng2 小时前
C++ 数据结构进阶:哈希表原理
数据结构·c++·算法·哈希算法
xiaoye-duck2 小时前
C++ 二叉搜索树(BST)深度解析:从概念原理、核心操作到底层实现
数据结构·c++
丶小鱼丶2 小时前
数据结构和算法之【队列】
java·数据结构
robch3 小时前
golang container/heap 是一个为任意类型实现堆(优先队列)接口的包
数据结构·算法·golang
leonkay11 小时前
Golang语言闭包完全指南
开发语言·数据结构·后端·算法·架构·golang