簡體   English   中英

C ++:遞歸地附加鏈表

[英]C++: Appending linked list recursively

這段代碼應該附加兩個鏈接列表,我完全看不出這個代碼如何附加作為參數傳遞的兩個Cell Structs,因為沒有對第二個參數進行操作。 它只是要求第一個Cell中的下一個節點 - 所以它如何工作?

void Append(Cell *& first, Cell* second)
{
  if (first == NULL)
  {
    first = second;
  }
else {
    Append(first->next, second);
  }
}

它會遞歸直到first是對第一個列表中最后一個Cellnext指針的引用,它設置為指向第二個Cell中的第一個Cell 它不需要操縱second (假設它是一個單鏈表)。

它是一個遞歸算法,一直走到第一個列表的末尾( else分支); 一旦找到結束( first==NULL ),第二個列表的第一個元素將鏈接到第一個元素的最后一個元素,獲得一個列表,該列表是兩個原始列表的串聯。

else功能塊會繼續跟隨next的指針first ,直到它到達該列表的末尾。 也就是說,直到first->nextNULL並且else不會被執行。

現在if塊中的基本情況。 first->nextNULL ,它將指針更改為指向second ,這可能是另一個列表中的第一個元素。

有一些影響的原因是因為first->next指針是通過引用傳遞的。 修改指針將修改列表末尾的實際指針,而不是僅修改副本。

第二個列表不需要修改。 代碼將遞歸遍歷第一個列表,直到它到達第一個列表中的最后一個元素,並將該元素的下一個指針設置為第二個列表的開頭。 第二個列表中的元素將由兩個列表共享。

之前:

first → a → b → c

second → d → e → f

后:

first → a → b → c
                ↓
second →        d → e → f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM