力扣刷题日记-160-相交链表

57 阅读1分钟

解题思路: 两条链表相加总数一样,最后那几个元素是公共的

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

/**
 * 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) {
    // 方法一
    // if(headA == null || headB == null) {
    //     return null
    // }
    // let pA = headA,pB = headB;
    // while(pA != pB) {
    //     pA = pA == null ? headB : pA.next
    //     pB = pB == null ? headA : pB.next
    // }
    // return pA

    // 方法二
    let l1 = 0, l2 = 0, diff = 0;
    let head1 = headA, head2 = headB;
    while (head1 != null) {
        l1++
        head1 = head1.next
    }
    while (head2 != null) {
        l2++
        head2 = head2.next
    }
    // 经过上面两个while的干活, head1 和 head2的值已经是null了,所以下面记得重新指回去
    if (l1 < l2) {
        head1 = headB
        head2 = headA
        diff = l2 - l1
    } else {
        head1 = headA
        head2 = headB
        diff = l1 - l2
    }
    for (let i = 0; i < diff; i++) {
        head1 = head1.next
    }
    while (head1 != null && head2 != null) {
        if (head1 == head2) {
            return head1
        }
        head1 = head1.next;
        head2 = head2.next
    }
    return null

};