题目
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
说明:不允许修改给定的链表。
解题思路
题目需要解决两个问题:
- 如何判断链表中有环?
- 链表存在环,如何查找到入口?
如何判断链表中有环?
可以采用快慢指针法,慢指针一次走一步,快指针一次走两步,如果链表中存在环,两指针一定会在环内相遇。
链表存在环,如何查找到入口?
这表明,从头结点出发一个指针,从相遇结点 也出发一个指针,这两个指针每次只走一个结点, 那么当这两个指针相遇的时候就是 环形入口的结点。
实现代码
1 | var detectCycle = function(head) { |