2016-11-13 25 views
-4

學習一些鏈接列表並不確定此循環如何與分配一起工作。有人可以向我解釋這個循環如何在函數內工作嗎?

該代碼旨在查找兩個鏈接列表的交集。

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

「有人可以向我解釋這個if else循環是如何工作的嗎?」 - 代碼中沒有任何'if..else' – artm

+1

'cur1 = cur1'不是它所說的。它說'cur1 =(cur1?cur1-> next:headB);'...換句話說,它會在取消引用前檢查'cur1'是否爲空。在你的第二個'while'循環中,如果'cur1'或'cur2'爲空,你將會崩潰。 – par

+0

這實際上是非常有用的,因爲除非我使用這個,否則我的程序編譯時遇到了問題,謝謝! @par – johnson

回答

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

是三元運算符。這是檢查是否cur1爲null試圖「移動到下一個節點」 之前,它等效於:

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

與您提出的版本的問題是,如果cur1恰好是零,你會得到分段故障。

相關問題