递归复制链接列表

时间:2016-03-30 04:18:33

标签: c++ recursion linked-list copy-constructor

我正在使用几乎所有的递归函数创建一个链表,我被困在复制构造函数上。链表具有头部和尾部虚拟节点。我有:

 /* Recursively duplicates the list. */
void duplicateNodes(const SortedList& o, Node * const copyIter) {

    if (copyIter != head) {
        duplicateNodes(o, copyIter->previous);
    }

    tail = tail->next = createNode(tail, copyIter->data, nullptr);
    size = o.size;

}

我的副本构造函数:

SortedList(const SortedList& o) {
    duplicateNodes(o, o.tail);
}

提前致谢!我还没有完全理解递归。

1 个答案:

答案 0 :(得分:0)

我将描述答案,但我会把编码留给你,因为它似乎是家庭作业,你可能应该自己做。我希望能够允许的权力。递归应始终具有停止条件,将其放在函数的开头是一种很好的做法。您的递归函数duplicateNodes不需要整个列表o,只需要它的头部。 它需要做的是,基本上遍历o的节点并在列表中创建相应的节点,因此duplicateNodes将使用nodeBeingCopied-> next来调用自身。停止条件显然是nodeBeingCopied == null(尽管如果它在函数末尾,则nodeBeingCopied-> next == null也可以工作)。递归函数的主体将创建一个新节点并将其添加到列表的末尾。每次我们将一个节点添加到列表中时,大小应该增加一。 希望这能为您提供足够的信息来自行完成。如果您需要更多帮助,请询问。