Q14-LeetCode141- 环形链表

47 阅读1分钟

实现思路

方法1 快慢指针

1 环形链表的特点:

  • 只要是环形链表,那么必然会让slow 和 fast进入循环
  • 这时候 fast相对 slow每次都会逼近1步,所以 他们必然会相遇

2 如果环比较特殊,在很靠后且环的距离很近

  • 那么这时候,fast 必然会在这个环里死循环,直到slow 进入环里 return掉

参考文档

1.1- 一文搞定常见的链表问题

1.2- 一个视频讲透快慢指针

代码实现

方法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
};