链表-链表相交

95 阅读1分钟

题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

首先要搞明白不是值相等,而是指针相等,这道题有两个解法,一个是哈希表,即把headA存进哈希表,然后遍历headB看看是否有相等的值,有则是链表是相交的

另一个是双指针法,即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) {
    while(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;
};