繁体   English   中英

C ++:递归地附加链表

[英]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是对第一个列表中最后一个Cellnext指针的引用,它设置为指向第二个Cell中的第一个Cell 它不需要操纵second (假设它是一个单链表)。

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

else功能块会继续跟随next的指针first ,直到它到达该列表的末尾。 也就是说,直到first->nextNULL并且else不会被执行。

现在if块中的基本情况。 first->nextNULL ,它将指针更改为指向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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM