160.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use strict'
  2. /**
  3. * Definition for singly-linked list.
  4. * function ListNode(val) {
  5. * this.val = val;
  6. * this.next = null;
  7. * }
  8. */
  9. function ListNode(val) {
  10. this.val = val
  11. this.next = null
  12. }
  13. /**
  14. * @param {ListNode} headA
  15. * @param {ListNode} headB
  16. * @return {ListNode}
  17. */
  18. var getIntersectionNode = function (headA, headB) {
  19. let set = new Set()
  20. let pA = headA,
  21. pB = headB
  22. while (pA !== null && pB != null) {
  23. if (set.has(pA)) return pA
  24. set.add(pA)
  25. if (set.has(pB)) return pB
  26. set.add(pB)
  27. pA = pA.next
  28. pB = pB.next
  29. }
  30. if (pA === pB) return null
  31. let curr = null
  32. if (pA === null) {
  33. curr = pB
  34. } else {
  35. curr = pA
  36. }
  37. while (curr !== null) {
  38. if (set.has(curr)) return curr
  39. set.add(curr)
  40. curr = curr.next
  41. }
  42. return null
  43. }
  44. function __main__() {
  45. let n2 = new ListNode(2)
  46. let n22 = new ListNode(3)
  47. let n23 = new ListNode(3)
  48. let n24 = new ListNode(3)
  49. n2.next = n22
  50. n22.next = n23
  51. n23.next = n24
  52. let n1 = new ListNode(3)
  53. let n12 = new ListNode(3)
  54. let n13 = new ListNode(3)
  55. n1.next = n12
  56. n12.next = n13
  57. n24.next = n12
  58. let n3 = new ListNode(3)
  59. /*eslint no-console: ["error", { allow: ["log"] }] */
  60. console.log(getIntersectionNode(n1, n2))
  61. console.log(getIntersectionNode(n2, n3))
  62. }
  63. __main__()