C ++:递归地附加链表

时间:2012-12-22 21:15:51

标签: c++ pointers recursion linked-list

这段代码应该附加两个链表,我完全看不出这段代码如何附加作为参数传递的两个Cell Structs,因为第二个参数没有进行任何操作。它只是要求第一个Cell中的下一个节点 - 所以它如何工作?

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

4 个答案:

答案 0 :(得分:1)

它会递归,直到first引用第一个列表中最后一个next的{​​{1}}指针,它指向第一个列表中的第一个Cell第二。它不需要操纵Cell(假设它是单链表)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

函数的else块一直跟随next的{​​{1}}指针,直到它到达该列表的末尾。也就是说,直到firstfirst->next并且NULL未执行。

现在是else块中的基本案例。当iffirst->next时,它会将指针更改为指向NULL,这可能是另一个列表中的第一个元素。

有一些影响的原因是因为second指针是通过引用传递的。修改指针将修改列表末尾的实际指针,而不是仅修改副本。

答案 3 :(得分:1)

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

<强>之前:

first → a → b → c

second → d → e → f

<强>后:

first → a → b → c
                ↓
second →        d → e → f
相关问题