Cycle Detection

/**
 * A LinkedList based solution for Detecting a Cycle in a list.
 * https://en.wikipedia.org/wiki/Cycle_detection
 */

function detectCycle(head) {
  /*
  Problem Statement:
  Given head, the head of a linked list, determine if the linked list has a cycle in it.
  Link for the Problem: https://leetcode.com/problems/linked-list-cycle/
  */
  if (!head) {
    return false
  }

  let slow = head
  let fast = head.next
  while (fast && fast.next) {
    if (fast === slow) {
      return true
    }
    fast = fast.next.next
    slow = slow.next
  }
  return false
}

export { detectCycle }