实现思路
方法1 快慢指针
1 环形链表的特点:
- 只要是环形链表,那么必然会让slow 和 fast进入循环
- 这时候 fast相对 slow每次都会逼近1步,所以 他们必然会相遇
2 如果环比较特殊,在很靠后且环的距离很近
- 那么这时候,fast 必然会在这个环里死循环,直到slow 进入环里 return掉
参考文档
代码实现
方法1: 快慢指针 时间复杂度: O(n) 空间复杂度: O(1)
function hasCycle(head: ListNode | null): boolean {
let slow = head, fast = head
while (fast && fast.next) {
slow = slow.next
fast = fast.next.next
if (slow === fast) return true
}
return false
};