js 检测链表是否有环
set 判重
利用节点的内存地址来进行判重
var hasCycle = function (head) {
let set = new Set();
let p = head;
while (p) {
//存在重复
if (set.has(p)) {
return true;
}
set.add(p);
p = p.next;
}
return false;
};
利用快慢指针
主要是利用的「Floyd 判圈算法」(又称龟兔赛跑算法),首先慢指针每次移动一步,快指针移动2步,如果没有环,那么慢指针永远也追不上快指针。如果有环,那么快指针一定会遇到慢指针
var hasCycle = function (head) {
let fast = head,
slow = head;
// 零个结点或者一个结点,肯定无环
if (fast.next == null || fast.next.next == null) return false;
while (fast && fast.next) {
//走一步
slow = slow.next;
//走二步
fast = fast.next.next;
if (slow === fast) {
return true;
}
}
return false;
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步