判断是否包含环
判断链表是否包含环属于经典问题了,解决方案也是用快慢指针:
每当慢指针 slow
前进一步,快指针 fast
就前进两步。
如果 fast
最终遇到空指针,说明链表中没有环;如果 fast
最终和 slow
相遇,那肯定是 fast
超过了 slow
一圈,说明链表中含有环。
双指针技巧秒杀七道链表题目 | labuladong 的算法笔记
主要思考下,为何有环,快慢指针一定会相遇?相遇时间长吗?
判断环的起点
当然,这个问题还有进阶版,也是力扣第 142 题环形链表 II
比如一下环的起点为 2
代码可视化:
双指针技巧秒杀七道链表题目 | labuladong 的算法笔记
当快慢指针相遇时,让其中任一个指针指向头节点,然后让它俩以相同速度前进,再次相遇时所在的节点位置就是环开始的位置。
这里进行了分析: 为何快慢指针在环里一定相遇?