题目链接
关键词
{% 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即,只需在两个指针相遇后,令快指针回到链表头,并和慢指针一样,每次只走一步,当两个指针相遇时,就一定是在环的入口 核心:时间换空间
代码
- 解法一代码:
- 解法二代码:
相似题目
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/86d59685a7ca
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts