2016-11-13 13 views
-4

一部のリンクされたリストを勉強していて、このループがどのように割り当てで動作するかは不明です。誰かがこのループがどのように機能内でしか機能するのかを私に説明することはできますか?

このコードは、2つのリンクされたリストの共通部分を見つけることを目的としています。

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 
    ListNode *cur1 = headA, *cur2 = headB; 
    while(cur1 != cur2){ 
     cur1 = cur1 ? cur1->next : headB; 
     cur2 = cur2 ? cur2->next : headA; 
    } 
    return cur1; 
} 

私はcur1 = cur1が割り当てではなく、ブール条件で評価されるかどうかはわかりません。私はかかわらず、ランタイムエラーになってしまいますかなり確信している。これにより

while(cur1 != cur2){ 
    cur1 = cur1->next; 
    cur2 = cur2->next; 
} 
return cur1; 

を:私はどのように反復動作しますが、私はちょうど行うことができない理由がわからない理解しています。

+2

「誰かがこのelse if loopの仕組みを説明できますか?」 - あなたのコードに 'if..else'はありません – artm

+1

' cur1 = cur1'はそれが言うものではありません。 'cur1 =(cur1?cur1-> next:headB);' ...つまり、逆参照する前に 'cur1'がヌルかどうかをチェックします。 2番目の 'while'ループで、' cur1'または 'cur2'がnullの場合はクラッシュします。 – par

+0

ああこれは実際には本当に役に立ちます。なぜなら私がこれを使わなければ、私のプログラムをコンパイルするのに問題があったからです! @par – johnson

答えて

4
cur1 = cur1?cur1->next:headB; 

三項演算子です。 cur1は、「次のノードに移動」しようとする前に、nullの場合、同等です チェックされています

if (cur1 != null){cur1 = cur1->next;} 
else {cur1 = headB;} 

あなたが提案したバージョンで問題がcur1がNULLであることを起こる場合は、あなたが取得することですセグメンテーション違反。

関連する問題