'use strict' /** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ function ListNode(val) { this.val = val this.next = null } /** * @param {ListNode} head * @return {boolean} */ var hasCycle = function (head) { if (head === null || head.next === null) return false let set = new Set() let curr = head set.add(curr) curr = curr.next for (;;) { if (curr === null) return false if (set.has(curr)) return true set.add(curr) curr = curr.next } } function __main__() { let n13 = new ListNode(3) let n12 = new ListNode(3) let n1 = new ListNode(1) n1.next = n12 n12.next = n13 let n23 = new ListNode(3) let n22 = new ListNode(3) let n2 = new ListNode(1) n23.next = n2 n2.next = n22 n22.next = n23 /*eslint no-console: ["error", { allow: ["log"] }] */ console.log(hasCycle(n1)) console.log(hasCycle(n2)) } __main__()