这段代码应该附加两个链表,我完全看不出这段代码如何附加作为参数传递的两个Cell Structs,因为第二个参数没有进行任何操作。它只是要求第一个Cell中的下一个节点 - 所以它如何工作?
void Append(Cell *& first, Cell* second)
{
if (first == NULL)
{
first = second;
}
else {
Append(first->next, second);
}
}
答案 0 :(得分:1)
它会递归,直到first
引用第一个列表中最后一个next
的{{1}}指针,它指向第一个列表中的第一个Cell
第二。它不需要操纵Cell
(假设它是单链表)。
答案 1 :(得分:1)
它是一个递归算法,一直走到第一个列表的末尾(else
分支);一旦找到结束(first==NULL
),第二个列表的第一个元素将链接到第一个元素的最后一个元素,获得一个列表,该列表是两个原始列表的串联。
答案 2 :(得分:1)
函数的else
块一直跟随next
的{{1}}指针,直到它到达该列表的末尾。也就是说,直到first
为first->next
并且NULL
未执行。
现在是else
块中的基本案例。当if
为first->next
时,它会将指针更改为指向NULL
,这可能是另一个列表中的第一个元素。
有一些影响的原因是因为second
指针是通过引用传递的。修改指针将修改列表末尾的实际指针,而不是仅修改副本。
答案 3 :(得分:1)
不需要修改第二个列表。代码将递归遍历第一个列表,直到它到达第一个列表中的最后一个元素,并将该元素的下一个指针设置为第二个列表的开头。第二个列表中的元素将由两个列表共享。
<强>之前:强>
first → a → b → c second → d → e → f
<强>后:强>
first → a → b → c ↓ second → d → e → f