最近在看数据结构和算法,努力总结出道~
TL;DR
环形链表,每走一步,看看有没有标识过,标识过肯定是环,且从这里开始的环。没有就标识下,继续走~
练习:判断链表中是否有环
判断链表中是否有环,其实有点像四处游玩,怎么知道你走过一个圈,其实只要你第二次走到走过的地方,就说明走过一个圈了。
于是,每走过一个地方,就给这个地方标识下,如果再次看到这个标识表明这个地方游过,也就说明,走了一个圈。
var hasCycle = function (list) {
let p = list
while(p){
// 遇到走过的,就有一个圈了
if(p.flag) return true
// 遇到没走过的,标记下,继续走
p.flag = true
p = p.next
}
return false
};
练习:环从哪开始的
可以沿用上面的思路,我觉得就没啥了
var detectCycle = function (list) {
let p = list;
while (p) {
if (p.flag) return p
p.flag = true
p = p.next
}
return null;
};