无论利用哪种方法,特判还是需要的,没有节点,或者只有一个节点说明一定是没有环,
方法一:利用数组判断
类似哈希表,每次将头结点插入数组中,头结点指向下一个位置,判断在数组中是否存在当前节点,如果存在就说明存在环的。不存在就没有换。
var hasCycle = function(head) {
if (head == null || head.next == null) return false;
const res = [];
while (head) {
if (res.includes(head)) {
return true;
}
res.push(head);
head = head.next;
}
return false;
};
方法二利用快慢指针,
如果没有环就说明是一条直线,直线上面,快的一定比慢的在前面,那样永远都不会相遇。如果有环快慢指针一定会相遇。
快指针每次走两步,慢指针每次走一步,
var hasCycle = function(head) {
if (head == null || head.next == null) return false;
let fast = head, low = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
low = low.next;
if (fast == low) return true;
}
return false;
};