欢迎查看和关注一个开源的个人学习计算机科学知识成长记录(前后端,数据结构与算法)
142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.com)
哈希表
保存遍历结果,如果出现相同的则返回
var detectCycle = function(head){
const visited = new Set();
while(head!==null){
if(visited.has(head)){
return head;
}
visited.add(head);
head = head.next;
}
return null;
};
执行结果:通过
执行用时:56 ms, 在所有 JavaScript 提交中击败了99.95%的用户
内存消耗:44 MB, 在所有 JavaScript 提交中击败了9.87%的用户
通过测试用例:16 / 16
快慢指针
快指针移动两个位置,慢指针只移动一个位置
var detectCycle = function(head){
if(head === null){
return null
}
let slow = head, fast = head;
while(fast!==null){
slow = slow.next;
if(fast.next!==null){
fast = fast.next.next;
}else{
return null;
}
if(fast === slow){
let ptr = head;
while(ptr!==slow){
ptr = ptr.next;
slow = slow.next;
}
return ptr;
}
}
return null;
}
执行结果:通过
执行用时:68 ms, 在所有 JavaScript 提交中击败了95.21%的用户
内存消耗:43.6 MB, 在所有 JavaScript 提交中击败了38.61%的用户
通过测试用例:16 / 16