环形链表
问题一:判断链表是否有环
问题一思路分析
🎷首先题目已经给出了思路:
- 🎨如果链表中有某个节点,可以通过连续跟踪
next
指针再次到达,则链表中存在环
👞👞这就类似于追赶/追及
的问题,我们经常用到的是 快慢指针
👞👞
我们将上面的链表图转换为更为简单的直观图
- 🎯
fast
和slow
两个人赛跑 - 🎯fast先进入环
-
🎯等到
slow
开始进入环的时候,开始追及问题
-
🎯假设
环的长度为C
-
🎯此时
fast
和slow
相差C - X
-
🎯而fast追slow的时候,每一步都会使得
C-X
少1
-
🎯所以
最终他们会相遇
-
🎯如果他们
相遇
了,证明这是个环
- 🎯如果
slow遇不到fast,fast先遇到NULL
,证明这不是个环 </