两个链表的第一个公共节点(浪漫相遇)

2022-05-17  本文已影响0人  曾大稳丶

题目链接:https://leetcode.cn/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/

image.png

题目解析:
本题目采用双指针的方式,当A B指针不相等的时候,依次遍历,如果A B指针任意为null,就赋值A=B(如果Anull)或者B=A(如果Bnull)
原理: A的长度为aB的长度为b, 相交点距离最末尾的距离为c 。那么A从头走到尾,在从B的头走到相交点,那么距离就是a+(b-c)B从头走到尾,在从A的头走到相交点,那么距离是b+(a-c),满足加法交换律,所以找到相交点。
图文分析可见:https://leetcode.cn/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/solution/jian-zhi-offer-52-liang-ge-lian-biao-de-gcruu/

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    ListNode A = headA,B = headB;
    while (A != B){
        A = A == null ? headB : A.next;
        B = B == null ? headA : B.next;
    }
    return headA;
}

复杂度分析
空间复杂度: O(1)。
时间复杂度: O(M+N)。

上一篇 下一篇

猜你喜欢

热点阅读