【 Day 11 】2021-05-20 - 142. 环形链表 II
题目描述
142. 环形链表 II
入选理由
暂无
题目地址
前置知识
暂无
题目描述
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题?
我的回答
解法一
时空复杂度
时间复杂度:O(n)
空间复杂度: O(n)
链表问题首先使用Map记录结点,有环就会重复走一个结点
var detectCycle = function (head) {
let map = new Map()
while (head) {
if (map.has(head)) return head
map.set(head, 1)
head = head.next
}
return null
};解法二
时空复杂度
时间复杂度:O(n)
空间复杂度: O(1)
快慢指针,快慢指针第一次相遇的时候,头结点和慢指针离入环点的距离相等
var detectCycle = function (head) {
let slow = head
let fast = head
while (fast) {
slow = slow.next
if (!fast.next) return null
fast = fast.next.next
if (fast !== slow) continue
let pre = head
while (pre !== slow) {
pre = pre.next
slow = slow.next
}
return slow
}
return null
};