Likou160。最もロマンチックな交差リンクリスト

道の終わりで、あなたがあなたに会わなければ、あなたが会うとき、あなたは私のようになります

トピック:

2つの単一リンクリストが交差する開始ノードを見つけるプログラムを作成します。

次の2つのリンクリストなど。

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-FG3Rqb24-1612275121233)(https://secure-static.wolai.com/ static / cg7fPf268yzME1VhKUuqJj / image.png)]

分析:

リンクリストAとBが交差するかどうかに関係なく、A + B = B + Aに従います。次に、2つのポインターは、最初に独自のリンクリストをウォークスルーし、次にもう一方のリンクリストをウォークスルーします。その場合、2つのリンクリストが移動した距離は等しくなります。

次に、それらが交差する場合、交差する部分を削除したと見なすことができ、2つのポインターは最初に互いに進み、最後に同じパス上で手をつないで進みます。(少しロマンチックですか?)

コードは次のように表示されます。

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;
    }
};

おすすめ

転載: blog.csdn.net/Matcha_/article/details/113575464