160.相交链表
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function (headA, headB) {
// 哈希表记录节点
let map = new Map()
let cur = headA
while (cur) {
map.set(cur, true)
cur = cur.next
}
cur = headB
// map中存在的第一个节点即为相交节点
while (cur) {
if (map.has(cur)) {
return cur
}
cur = cur.next
}
return null
};
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
// 内存优化,双指针
var getIntersectionNode = function (headA, headB) {
if (!headA || !headB) {
return null
}
// a走完走b,b走完走a,他们会在公共点相遇,如果没有公共点,他们最后同时为null
let p1 = headA
let p2 = headB
while (p1 !== p2) {
p1 = p1 === null ? headB : p1.next
p2 = p2 === null ? headA : p2.next
}
return p1
}