Hi,
ich habe eine verkettete List, welche in umgekehrter Reihenfolge ausgegebn werden soll. Dabei soll diese Ausgabe max. O
haben.
Ich hab den Tip bekommen, dass dies unteranderem durch eine Rekursion möglich ist. Allerdigns habe ich keinen Plan, wie ich das umsetzten kann. Die normale Ausgabe habe ich hinbekommen.
Hier einmal die Klasse:
ich habe eine verkettete List, welche in umgekehrter Reihenfolge ausgegebn werden soll. Dabei soll diese Ausgabe max. O

Ich hab den Tip bekommen, dass dies unteranderem durch eine Rekursion möglich ist. Allerdigns habe ich keinen Plan, wie ich das umsetzten kann. Die normale Ausgabe habe ich hinbekommen.
Hier einmal die Klasse:
PHP:
class liste{
private:
struct knoten {
int info;
struct knoten *next;
};
struct knoten *pos; // Positionszeiger
struct knoten *pre_pos; // Vorgänger des Positionszeigers
struct knoten *anfang; // Zeiger auf den Anfang der Liste
public:
liste() {
pos = pre_pos = anfang = NULL; // Leere Liste
}
void ausgeben() { // ausgeben von Anfang bis Ende
struct knoten *p = anfang; // p zeigt auf aktuellen Knoten
cout << "Liste: ";
while (p != NULL) {
cout << p->info << " "; // Infoteil des aktuellen Knoten ausgeben
p = p->next; // p auf Folgeelement setzen
}
cout << endl;
}
void ausgeben_umgekehrt() {
/*if(p != NULL) {
p->ausgeben_umgekehrt();
}
cout << p->info << 'n';*/
}
int get() { // liefere aktuelles Element
return pos->info;
}
bool end() { // Ende erreicht?
return (pos == NULL);
}
void adv() { // Positionszeiger vorrücken
if (pos != NULL) {
pre_pos = pos;
pos = pos->next;
}
}
void reset() { // Positionszeiger an den Anfang setzen
pos = anfang;
pre_pos = NULL;
}
void ins(int x) {
struct knoten *p = new knoten; // erzeuge neuen knoten
p->info = x; // Infowert wird x
p->next = pos; // next wird initialisiert mit alten P.-Zeiger
// es wird also VOR dem aktuellen Element eingefügt
if (anfang == NULL) // Leere Liste
anfang = p;
if (pre_pos != NULL) // Positionszeiger hat einen Vorgänger
pre_pos->next = p;
else // neues Element steht am Anfang
anfang = p;
pos = p; // Positionszeiger zeigt nun auf das neue Element
}
void del() { // Aktuelles Element löschen
if (pos != NULL) { // P.-Zeiger steht nicht am Ende
if (pre_pos != NULL) // P.-Zeiger steht nicht am Anfang
pre_pos->next = pos->next;
else
anfang = pos->next; // Anfang wird neu gesetzt
delete pos; // Speicher aufräumen
if (pre_pos != NULL)
pos = pre_pos->next; // P.-Zeiger steht auf ehemaligem Nachfolger
else
pos = anfang; // korrigiert!!
}
}
};