C++:递归附加链表

C++: Appending linked list recursively

本文关键字:链表 递归 C++      更新时间:2023-10-16

这段代码应该附加两个链表,我完全看不出这段代码是如何附加作为参数传递的两个 Cell 结构的,因为第二个参数没有发生任何操作。 它只是要求第一个单元格中的下一个节点 - 那么这如何工作?

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

函数的else块一直跟随firstnext指针,直到它到达该列表的末尾。也就是说,直到first->nextNULL并且else不会被执行。

现在是if块中的基本情况。当first->nextNULL时,它会改变指针指向second,这可能是另一个列表中的第一个元素。

之所以有某种效果,是因为first->next指针是通过引用传递的。修改指针将修改列表末尾的实际指针,而不仅仅是修改副本。

它递归,直到first引用第一个列表中最后一个Cellnext指针,它设置为指向第二个列表中的第一个Cell。它不需要操作second(假设它是一个单链表)。

它是一种递归算法,一直走到第一个列表(else分支)的末尾;一旦找到结尾(first==NULL),第二个列表的第一个元素链接到第一个列表的最后一个元素,获得一个列表,该列表是两个原始列表的串联。

第二个列表不需要修改。代码将以递归方式遍历第一个列表,直到到达第一个列表中的最后一个元素,并将该元素的下一个指针设置为第二个列表的开头。第二个列表中的元素将由两个列表共享。

以前:

首先→ A → B → C 第二个→ d → e → f

之后:

首先→ A → B → C ↓ 第二→ D → e → F