142.环形链表2

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

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var detectCycle = function (head) {
    // 快慢指针判断
    let slow = head
    let fast = head
    let target = null
    while (slow && fast && fast.next) {
        // 慢指针每次移动一格,快指针每次移动两格,如果有环一定会相遇
        slow = slow.next
        fast = fast.next.next
        if (slow !== null && fast !== null && slow === fast) {
            target = slow
        }
    }

    return null
};

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var detectCycle = function (head) {
    // 哈希表,节点是一个对象,可以用Set或者Map,不能用{}
    // let visited = new Map()
    let visited = {}
    let cur = head
    while (cur) {
        if (visited.has(cur)) {
            return cur
        }
        // visited.add(cur)
        visited.set(cur, true)
        cur = cur.next
    }
    return null
}