Предполагая, что append()
работает правильно, вы можете просто вызывать его несколько раз в цикле для каждого элемента в copy
.
Этот подход, учитывая то, как вы реализовали свой связанный список с указателем tail
, делает его идеальным решением.Вы написали функцию append
, так что это просто вопрос ее стратегического использования.
Тем не менее, имейте в виду, что если вы внедрили свой связанный список без указателя хвоста (куда вы должны были перейтиконец списка к append
), этот подход все еще будет работать, но будет крайне неэффективным и не удовлетворительным.
Вот пример (не проверенный):
List(const List & copy) : head(nullptr), tail(nullptr)
{
ListNode *copyNode = copy.head;
while (copyNode)
{
append(copyNode->item);
copyNode = copyNode->next;
}
}
Примечаниечто это не было проверено на граничные условия, поэтому вам может потребоваться проверить, является ли copy
пустым, прежде чем проходить цикл.
Вот пример, который работает для простого случая