1. 程式人生 > 其它 >力扣160. 最浪漫的相交連結串列

力扣160. 最浪漫的相交連結串列

技術標籤:力扣刷題演算法C/C++單鏈表連結串列

路至盡頭,不見君,待到相遇,君亦如我

題目:

編寫一個程式,找到兩個單鏈表相交的起始節點。

如下面的兩個連結串列:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-FG3Rqb24-1612275121233)(https://secure-static.wolai.com/static/cg7fPf268yzME1VhKUuqJj/image.png)]

解析:

連結串列A和B相交與否先不論,根據A+B = B + A。那麼兩指標先走完自己的連結串列後,再走對方的連結串列。那麼兩個連結串列走過的路程相等。

那麼如果相交,可以看作將相交部分去掉,那麼兩個指標先走完彼此的路,最後攜手走上共同的路。(是不是有點浪漫)

程式碼如下:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if(headA == nullptr || headB == nullptr)
            return nullptr;
        ListNode *pa = headA;
        ListNode *pb = headB;
    
        while(pa!=pb) {
            pa = !pa ? headB : pa->next;
            pb = !pb ? headA : pb->next;
        }
        return pa;
    }
};