思考
遍历链表时
- 假设链表没有环,最后指针会指向null。
- 假设链表有环,那么指针就会一直在那个环里循环遍历。
解题思路
通过小学数学题环型跑道相遇问题,确定跑道是环证明快慢学生会相遇。反推,设链表有快慢两指针,他们沿着链表往下遍历,如果相遇就证明链表有环。
代码
function hasCycle (head) {
// 如果头指针指向null,肯定不是环形链表
if (!head) return false;
// 设快慢指针
let fast = slow = head;
// 如果fast为null或指向null,说明走到链表尾了
while(fast && fast.next) {
fast = fast.next.next;
slow = slow.next;
// 如果相遇则,证明链表是环形链表
if (fast === slow) return true;
}
return false
}