Neredeyse tüm özyinelemeli işlevleri kullanarak bağlantılı bir liste oluşturuyorum ve kopya oluşturucuda güldüm. Bağlı listede bir kafa ve bir kuyruk kukla düğümü vardır. Ben:Bağlantılı Listeyi Kopyala Tekrarlı olarak
/* 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;
}
Ve kopya yapıcısı:
SortedList(const SortedList& o) {
duplicateNodes(o, o.tail);
}
peşin! Ben henüz tekrarlamayı anlayamıyorum.
Eğer 'head' ve' tail' 'SortedList' öğesinin özel üyeleriyse, '_tail' veya' m_tail' gibi bir önek gösterimi kullanmanızı öneririm. – Dagrooms
Ya da her zaman bununla belirtin -> kuyruk. Ayrıca, insanlar aynı satırda iki ödev kullandıklarında nefret ediyorum, okumak ve takip etmek dehşet verici. –
BTW, bana öyle geliyor ki, burada sahip olduğun şey kendini tekrar tekrar arayan sonsuz bir döngü. İlk if ifadeniz muhtemelen doğru olacaktır ve yinelemeniz yinelenen düğümleri aramaya devam edecektir. –