解题思路
- 思路一
暴力破解 - 设置一个时间(0.5s ~ 1s),如果在这个时间内没有走到尾节点,则认为是环形链表。 - 思路二
将当前节点存入一个Set
中,同时判断该节点的下个节点是否在Set
中,如果存在,则是环形链表。
该解题方法唯一的不足,是需要额外的空间存放已经走过的节点。 - 思路三
快/慢指针,经典的解题方法。缺点是大部分的开发第一次接触到该题是想不到的。
代码
➥ JavaScript
/**
* 快慢指针解法
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
if (!head || !head.next) {
return false
}
let slow = head
let fast = head
while(slow.next && fast.next && fast.next.next) {
slow = slow.next
fast = fast.next.next
if (slow === fast) {
return true
}
}
return false
};