2017-10-28 3 views
-1

Ich habe eine Funktion, die zufällige Ganzzahlen in eine Liste einfügt, und eine Funktion, die die Liste anzeigt. Mit was ich jetzt habe, gibt es eine Möglichkeit, diese Liste umgekehrt anzuzeigen?Wie kann ich eine verknüpfte Liste stornieren?

void InsertRandomInts() 
{ 
LinkedSortedList<int> list; 
srand((unsigned)time(NULL)); 

for (int i = 0; i < 50; ++i) 
{ 
    int b = rand() % 100 + 1; 
    list.insertSorted(b); 
}  
displayListForward(&list); 

} 


void displayListForward(SortedListInterface<int>* listPtr) 
{ 
cout << "The sorted list contains " << endl; 
for (int pos = 1; pos <= listPtr->getLength(); pos++) 
{ 
    cout << listPtr->getEntry(pos) << " "; 
} 
cout << endl << endl; 
} 

Antwort

0

Eine gute Idee wäre, diese Nicht-Standard-generischen Container loszuwerden und stattdessen std::list (oder wirklich nur std::vector, wenn Sie keine Liste spezifische Semantik wie müssen in der Lage sein um ein Element zu entfernen, ohne Iteratoren für andere Elemente zu deaktivieren).

Die sort Member-Funktion kann angewendet werden, nachdem alle Elemente hinzugefügt wurden. Sie können dann schließlich rbegin und rend für die umgekehrte Iteration verwenden.

Hier ist ein einfaches Beispiel:

#include <iostream> 
#include <list> 
#include <cstdlib> 
#include <ctime> 

void DisplayListForward(std::list<int>& list) 
{ 
    std::cout << "The sorted list contains\n"; 

    for (auto iter = list.rbegin(); iter != list.rend(); ++iter) 
    { 
     std::cout << *iter << " "; 
    } 
    std::cout << '\n'; 
} 

void InsertRandomInts() 
{ 
    std::list<int> list; 
    std::srand(static_cast<unsigned>(std::time(nullptr))); 

    for (int i = 0; i < 50; ++i) 
    { 
     auto const b = std::rand() % 100 + 1; 
     list.push_back(b); 
    } 

    list.sort(); 

    DisplayListForward(list); 
} 

int main() 
{ 
    InsertRandomInts(); 
} 

Aber das zu viel des Guten kann; Für eine schnelle Lösung, nur umkehren Sie Ihre aktuelle Schleife:

for (int pos = listPtr->getLength(); pos >= 1; pos--) 
+0

Für das, was ich tun muss, nehme ich die schnelle Lösung. Vielen Dank. –

2

Iterate die Liste rbegin()-rend() und ausdrucken. Sie werden es in umgekehrter Reihenfolge drucken.

entweder 1) das Rad neu zu erfinden stoppen und nur einen Standardbehälter verwenden, die diese Funktionen aufweist. Oder 2) implementieren rbegin() & rend() für Ihren benutzerdefinierten Container.

Wie

for (auto it = list.rbegin(); it != it.rend(); ++it) 
    // Print *it 
+0

wie würde das im Code aussehen? Das hört sich genau nach dem an, was ich mit dem Drucken nach vorne mache. –

+0

Das OP verwendet keinen Standardcontainer. Kein 'rbegin' und' rend' ... –

+0

@Christian Hackl dann könnte OP entweder 1) aufhören, das Rad neu zu erfinden und einfach einen Standardcontainer benutzen. Oder 2) Implementiere 'rbegin()' & 'rend()' für seinen eigenen Container. –

Verwandte Themen