Skip to content

面试题 02.07. 链表相交

同:160.链表相交

力扣题目链接(opens new window)

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

思路

假设链表A长度x+z

链表B长度y+z

那么x+A=y+b

所以遍历一遍之后分别从对方的起始位置遍历即可找到相交节点

代码

js
/**
 * 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 pointerA = headA
    let pointerB = headB
    while (pointerA !== pointerB) {
        if (pointerA.next === null && pointerB.next === null) {
            return null
        }
        pointerA = pointerA.next ?? headB
        pointerB = pointerB.next ?? headA
    }
    return pointerA
};