[英]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.