# 算法思维 🔨
- 双指针
- 「快慢指针」: 主要解决链表中的问题,比如典型的判定链表中是否包含环;
- 「左右指针」: 主要解决数组(或者字符串)中的问题,比如二分查找。
- 滑动窗口
- 递归
- DP(动态规划)
# 双指针(快慢指针)判断链表是否有环
- 建立一个快指针一个慢指针,快指针一次走两步,慢指针一次走一步
- 如果结构是环形的,那么他们肯定会相遇(相遇的点)
- 如果结构不是环形,毫无疑问快指针将会先到达终点!也就是链表的出口(next=null)
# 判断环路长度
- 同上,先找到他们相遇的点
- 慢指针不动,进行第二次迭代,快指针一次走一步,当他们再次相遇的时候就是环路的长度
# 判断环路的起点
- 先找到它们第一次相遇的点。此时快慢指针指向相同的位置。
- 慢指针不动,快指针返回起点
- 进行第二次迭代,快指针、慢指针一次走一步,当它们再次相遇时,此时的结点即是环路的起点。