二つの入力リスト、その第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;
}
};