text: // link to challenge = https://leetcode.com/problems/linked-list-cycle/
  // Objective:
  
  // Given head, the head of a linked list, determine if the linked list has a cycle in it.
  
  // There is a cycle in a linked list if there is some node in the list that can be reached
  // again by continuously following the next pointer. Internally, pos is used to denote the index
  // of the node that tail's next pointer is connected to. Note that pos is not passed as a parameter.
  
  // Return true if there is a cycle in the linked list. Otherwise, return false.
  
  // Solution:
  
  /**
   * Definition for singly-linked list.
   * function ListNode(val) {
   *     this.val = val;
   *     this.next = null;
   * }
   */
  
  /**
   * @param {ListNode} head
   * @return {boolean}
   */
  const hasCycle = function(head) {
    let fast = head;
    let slow = head;
  
    // memorize this pattern, it's very common
    while (fast && fast.next) {
      // iterate through and make sure you don't get a value of null
      // this would throw an error
      fast = fast.next.next;
      slow = slow.next;
  
      if (fast === slow) return true;
    }
  
    return false;
  };
  