# 算法思维 🔨

  • 双指针
    • 「快慢指针」: 主要解决链表中的问题,比如典型的判定链表中是否包含环;
    • 「左右指针」: 主要解决数组(或者字符串)中的问题,比如二分查找。
  • 滑动窗口
  • 递归
  • DP(动态规划)

# 双指针(快慢指针)判断链表是否有环

  1. 建立一个快指针一个慢指针,快指针一次走两步,慢指针一次走一步
  2. 如果结构是环形的,那么他们肯定会相遇(相遇的点)
  3. 如果结构不是环形,毫无疑问快指针将会先到达终点!也就是链表的出口(next=null)

# 判断环路长度

  1. 同上,先找到他们相遇的点
  2. 慢指针不动,进行第二次迭代,快指针一次走一步,当他们再次相遇的时候就是环路的长度

# 判断环路的起点

  1. 先找到它们第一次相遇的点。此时快慢指针指向相同的位置。
  2. 慢指针不动,快指针返回起点
  3. 进行第二次迭代,快指针、慢指针一次走一步,当它们再次相遇时,此时的结点即是环路的起点
Last Updated: 2 years ago