题目描述:

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构。

解析:

图片说明

1.定义两个指针n1和n2分别指向两个链表A和B的头节点
2.while循环,当n1和n2指的值不相等时
如果n1等于空,说明n1已经遍历完链表A,则使n1指向headB
如果n1不等于空,则n1指向下一个节点
如果n2等于空,说明n1已经遍历完链表B,则使n2指向headA
如果n2不等于空,则n2指向下一个节点
3.最后返回指针n1或者n2

Java:

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode n1 = headA;
        ListNode n2 = headB;
        while(n1 != n2) {
            if(n1 == null) {
                n1 = headB;
            } else {
                n1 = n1.next;
            }
            if(n2 == null) {
                n2 = headA;
            } else {
                n2 = n2.next;
            }
        }
        return n1;
    }

JavaScript:

var getIntersectionNode = function(headA, headB) {
    let n1 = headA;
    let n2 = headB;
    while(n1 !== n2) {
        if(n1 === null) {
            n1 = headB;
        } else {
            n1 = n1.next;
        }
        if(n2 === null) {
            n2 = headA;
        } else {
            n2 = n2.next;
        }
    }
    return n1;
};