2016-03-30 19 views
0

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.

+0

Eğer 'head' ve' tail' 'SortedList' öğesinin özel üyeleriyse, '_tail' veya' m_tail' gibi bir önek gösterimi kullanmanızı öneririm. – Dagrooms

+0

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. –

+0

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. –

cevap

0

Cevabı anlatacağım, ancak kodlamayı ev ödevi gibi göründüğünden beri bırakacağım ve muhtemelen bunu kendi başınıza yapmalısınız. Umarım izin veren güçler. Bir özyineleme her zaman bir durma koşuluna sahip olmalı, bu fonksiyonun başında yerleştirmek için iyi bir uygulamadır. Özyinelemeli yinelenen düğümler, tüm listeye, sadece kafasına gerek duymaz. Yapılması gereken, temel olarak o düğüm düğümlerini çaprazlamak ve listemizde karşılık gelen bir düğüm oluşturmak, böylece çift düğümler nodeBeingCopied-> ile kendiliğinden arayacaktır. Durma koşulu açık bir şekilde nodeBeingCopied == null olacaktır (nodeBeingCopied-> next == null işlevinin sonundaysa). Yinelemeli fonksiyonun gövdesi yeni bir düğüm oluşturacak ve listenin sonuna ekleyecektir. Listemize bir düğüm eklediğimizde, boyut bir artırılmalıdır. Umarım, bunu kendi başınıza yapacak kadar bilgi verir. Daha fazla yardıma ihtiyacınız varsa, sadece sorun.

İlgili konular