道の終わりで、あなたがあなたに会わなければ、あなたが会うとき、あなたは私のようになります
トピック:
2つの単一リンクリストが交差する開始ノードを見つけるプログラムを作成します。
次の2つのリンクリストなど。
分析:
リンクリスト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;
}
};