- 常用链表结构
- 单链表和双链表
- 如何判断是否有链表环,以及如何找到链表环的入口
同时使用快指针和慢指针从链表头进入,且快指针的速度为慢指针速度的两倍
判断是否有链表环:如果快指针和慢指针未相遇且快指针的 next 为 null,则说明链表无环;如果在P点相遇,则有链表环
如何找到链表环的入口:如图所示可以列出方程
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。
// 两个指针相遇的时候,慢指针走了L+X步,快指针走了L+X+H*n步,因为步长两倍的关系,可以获得
2(L+X) = (L+X+H*n)
L = n*(H-x)+(n-1)x