双指针(快慢指针)判断链表有环

71 阅读1分钟

题目

判断链表是否存在环

  • 通过快慢指针,快指针每次走两步,慢指针每次走一步,如果没有环,那快指针会先到终点,如果存在环,那么快慢指针一定会相遇
class ListNode {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

function hasCycle(head) {
  let slow = head;
  let fast = head;

  while (fast !== null && fast.next !== null) {
    slow = slow.next; // slow指针每次移动一个节点
    fast = fast.next.next; // fast指针每次移动两个节点

    // 如果slow和fast指针相遇,说明链表有环
    if (slow === fast) {
      return true;
    }
  }

  // 如果fast指针到达链表尾部,说明链表无环
  return false;
}