给定一个链表,判断链表中是否有环。(不使用额外空间)
示例:a-b-c-b
1、快慢指针
var hasCycle = function(head) {
if(!head || !head.next) {
return false;
}
var fast = head.next,
slow = head;
while(fast && fast.next) {
if(fast === slow) {
return true;
}
fast = fast.next.next;
slow = slow.next;
}
return false;
};
2、判断值
var hasCycle = function(head) {
while (head) {
if (head.val == null) {
return true;
}
head.val = null;
head = head.next;
}
return false;
};
现在来分析一下在js中这种带环的链表数据结构。因为只有一个next的原因,这个环只能出现在尾部或者是循环链表。下面我们创建一个带环的链表:
1-2-3-2
let c1 = {'val': 1, 'next': null},
c2 = {'val': 2, 'next': null},
c3 = {'val': 3, 'next': null};
c1.next = c2;
c2.next = c3;
c3.next = c2;
Screen Shot 2018-11-26 at 11.06.26 AM.png
结果很明显3232会一直显示,符合预期。
网友评论