ACWING66。リストの最初の2つの共通のノード(オファーは安全性を証明するために)

二つの入力リスト、その第1の共通のノードを見つけます。

共通ノードが存在する場合、ノード戻り、空。

サンプルは、
次のように二つのリストが与えられた:
A:A1 A2→

C1 C2→C3→

B:B1→B2→B3

第1の共通出力ノードC1

思考:
+ Cは鎖長と仮定
2つのB + Cの鎖の長さは
、その長さの公開部分を表すC> = Bと仮定する。

- :方法の一つは、最後の出会いと行く、Bの段階長いリストAを手放す
エンド二から二リスト、リストの開始点と行くがリストに行き、リスト2は、最後にリンクリストを行ってきました:2出発点。統合ステップ数Aとの交点の最初のポイントに到達+ B + C、最終的には交差点の最初の点で会います。

class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        ListNode* p1 = headA;
        ListNode* p2 = headB;
        while(p1 != p2) {
            if(p1) p1 = p1 -> next;
            else p1 = headB;
            if(p2) p2 = p2 -> next;
            else p2 = headA;
        }
        return p1;
    }
};
公開された843元の記事 ウォン称賛28 ビュー40000 +

おすすめ

転載: blog.csdn.net/tomjobs/article/details/104978999