相交链表(浪漫指针相遇法)

走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。

题目

Leetcode 160:找到两个单链表相交的起始节点

解法

一种比较巧妙的方式是,分别为链表A和链表B设置指针A和指针B,然后开始遍历链表,如果遍历完当前链表,则将指针指向另外一个链表的头部继续遍历,直至两个指针相遇。

若两个链表相交,则指针A和指针B必定在相交结点相遇;若两个结点不相交,则将会同时到达NULL。

image.png

代码(JAVA)

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    if (headA == null || headB == null) return null;
    ListNode pA = headA, pB = headB;
    while (pA != pB) {
        pA = pA == null ? headB : pA.next;
        pB = pB == null ? headA : pB.next;
    }
    return pA;
}

时间复杂度:O(n)

空间复杂度:O(1)

如果对您有帮助,记得留个赞哟~

猜你喜欢

转载自blog.csdn.net/leelitian3/article/details/106934518
今日推荐