ほとんどすべての再帰関数を使用してリンクリストを作成しています。コピーコンストラクタで困惑しています。リンクされたリストには、先頭と末尾のダミーノードがあります。私が持っている:リンクリストを再帰的にコピー
/* 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);
}
ありがとう!私はまだ再帰を完全に理解していません。
'headedと' tail'が 'SortedList'のプライベートメンバである場合、' _tail'や 'm_tail'のような接頭辞表記を使うことをお勧めします。 – Dagrooms
または必ずthis-> tailと表示してください。また、同じ行で2つの課題を使用すると嫌いですが、読んでフォローするのは恐ろしいことです。 –
ところで、ここにいるのは何度も何度も何度も自分自身を呼び出す無限ループだと私には思われます。あなたの最初のif文はおそらく真であり、あなたの再帰はduplicateNodes –