剑指 Offer 52. 两个链表的第一个公共节点

Posted on 2022-03-15 01:19  AcTourist  阅读(23)  评论(0)    收藏  举报

一、题目要求

 

二、题目分析

  1.找到相同值,我们可以选择用set来解决问题,用map要定义值,set更快,先遍历headA放到Set里,然后在把B遍历一遍,每个值和set里进行比较,找到输出该值,如果都没有就输出null

  2.双指针:借用一下别人的图,注意比较的是物理地址不是数值,就像下图一样;

 

三、代码分析

/**
 * 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 p1 = headA, p2 = headB;
    if( headA == null || headB == null){
        return null;
    }

    while( p1 != p2){
       p1 = p1 == null? headB:p1.next;
       p2 = p2 == null? headA:p2.next;
    }

    return p1;
};
/**
 * 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 tmp = new Set();
    while( headA != null){
        tmp.add(headA);
        headA = headA.next;
    }
    while( headB!=null){
        if(tmp.has(headB)){
            return headB;
        }
        headB = headB.next;
    }

    return null;
};

四、其他 

 1.在写双指针,用了两个if else 结果会超时