C++:递归附加链表
C++: Appending linked list recursively
这段代码应该附加两个链表,我完全看不出这段代码是如何附加作为参数传递的两个 Cell 结构的,因为第二个参数没有发生任何操作。 它只是要求第一个单元格中的下一个节点 - 那么这如何工作?
void Append(Cell *& first, Cell* second)
{
if (first == NULL)
{
first = second;
}
else {
Append(first->next, second);
}
}
函数的else
块一直跟随first
的next
指针,直到它到达该列表的末尾。也就是说,直到first->next
NULL
并且else
不会被执行。
现在是if
块中的基本情况。当first->next
NULL
时,它会改变指针指向second
,这可能是另一个列表中的第一个元素。
之所以有某种效果,是因为first->next
指针是通过引用传递的。修改指针将修改列表末尾的实际指针,而不仅仅是修改副本。
它递归,直到first
引用第一个列表中最后一个Cell
的next
指针,它设置为指向第二个列表中的第一个Cell
。它不需要操作second
(假设它是一个单链表)。
它是一种递归算法,一直走到第一个列表(else
分支)的末尾;一旦找到结尾(first==NULL
),第二个列表的第一个元素链接到第一个列表的最后一个元素,获得一个列表,该列表是两个原始列表的串联。
第二个列表不需要修改。代码将以递归方式遍历第一个列表,直到到达第一个列表中的最后一个元素,并将该元素的下一个指针设置为第二个列表的开头。第二个列表中的元素将由两个列表共享。
以前:
首先→ A → B → C 第二个→ d → e → f
之后:
首先→ A → B → C ↓ 第二→ D → e → F
相关文章:
- 使用双指针和递归反转链表
- 使用类进行实现时,递归打印C++中的链表
- 以递归方式从链表中删除节点
- 重载 == 以递归方式比较两个链表
- 链表中的递归长度函数实现
- 递归解决方案,用于显示线性链表数组
- 使用递归从尾部开始反转链表
- C++ 循环链表的递归基本情况
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 尝试使用递归和指针到指针反转链表,但反转函数没有给出预期的正确输出
- 以C++递归方式对链表中的元素求和
- 使用递归的二维链表复制构造函数
- 反向链表的递归函数(代码段说明)
- 递归复制链表
- 链表的递归析构函数
- 反转链表递归
- 链表递归和数组
- 通过注册表递归的最佳方法(c++)
- 链表递归插入函数
- C++链表递归问题