题目链接

关键词

{% label 哈希 red %}、{% label 双指针 blue %}、{% label 链表 green %}

解析

  • 解法一:
把访问过的节点,放进 set,如果在访问的过程中,出现了已经在 set 中存在的点,就说明有环 核心:空间换时间
  • 解法二:
设置快慢两个指针A、B,设链表起点到环的入口距离为 L1,A、B两个指针在环中相遇时,走过的距离环的起点为 L2,此时环剩下的长度为 L3、 又令快指针的速度为2,慢指针速度为1,所以有,快指针走过的距离为 L4,慢指针走过的距离为 L5,且 L4 = 2 * L5,L5 = L1 + L2 所以有:2 * L5 = L1 + 2 * L2 + L3 推出:L1 = L3 即,只需在两个指针相遇后,令快指针回到链表头,并和慢指针一样,每次只走一步,当两个指针相遇时,就一定是在环的入口 核心:时间换空间

代码

  • 解法一代码:
  • 解法二代码:

相似题目

Leetcode_剑指Offer_II_070-排序数组中只出现一次的数字Flutter 基础知识必备