/*
 * @lc app=leetcode.cn id=142 lang=javascript
 *
 * [142] 环形链表 II
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var detectCycle = function (head) {
  const hash = new Map()
  let count = 0;
  let cur = head;

  let flag = -1;
  while (cur) {
    if (hash.has(cur)) {
      flag = hash.get(cur)
      break
    }
    hash.set(cur, count);
    cur = cur.next;
    count++
  }

  if (flag === -1) {
    return null
  }

  let temp = head
  while (flag--) {
    temp = temp.next;
  }
  return temp;
};
// @lc code=end