[英]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
是對第一個列表中最后一個Cell
的next
指針的引用,它設置為指向第二個Cell
中的第一個Cell
。 它不需要操縱second
(假設它是一個單鏈表)。
它是一個遞歸算法,一直走到第一個列表的末尾( else
分支); 一旦找到結束( first==NULL
),第二個列表的第一個元素將鏈接到第一個元素的最后一個元素,獲得一個列表,該列表是兩個原始列表的串聯。
在else
功能塊會繼續跟隨next
的指針first
,直到它到達該列表的末尾。 也就是說,直到first->next
為NULL
並且else
不會被執行。
現在if
塊中的基本情況。 當first->next
為NULL
,它將指針更改為指向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.