相交鏈表(浪漫指針相遇法)

走到盡頭見不到你,於是走過你來時的路,等到相遇時才發現,你也走過我來時的路。

題目

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)

如果對您有幫助,記得留個贊喲~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章