"Einfach verkettete Liste" rückwärts ausgeben

ddjm1984

Grünschnabel
Hallo Leute,
bin neu hier und gerade dabei die Programmiersprache C++ zu erlernen.
Ich bin bei einer Aufgabe angekommen wo ich schon seit 2 Wochen dran bin und so langsam verzweifle, deswegen bitte ich um Eure Mithilfe.

Folgender Quelltext liegt der Aufgabe vor:
=================================

#include "stdafx.h"

using namespace System;

ref class listenelement
{
String ^daten;
listenelement ^next;
public:
Void datenSetzen(String ^datenneu);
Void anhaengen (String ^datenneu);
Void ausgeben();
};

//die Zeichenkette in das Element schreiben
Void listenelement::datenSetzen(String ^datenneu)
{
daten = datenneu;
}


//neues Element am Ende der Liste setzen
Void listenelement::anhaengen(String ^datenneu)
{
//hat next den Wert nullptr?
//dann ein neues Element anhängen
if (next == nullptr)
{
next = gcnew listenelement;
next->daten = datenneu;
}
//sonst die Methode für next noch einmal aufrufen
else
next->anhaengen(datenneu);
//nur zur Veranschaulichung
Console::WriteLine("Daten {0} wurden eingefügt.", datenneu);
}


//Alle Elemente der Liste ausgeben
Void listenelement::ausgeben()
{
//den ersten Eintrag ausgeben
Console::WriteLine("{0}", daten);
//wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
if (next != nullptr)
next->ausgeben();
}


int main(array<System::String ^> ^args)
{
//Handle auf den Anfang der Liste und das erste element per Hand erzeugen
listenelement ^listenanfang = gcnew listenelement;

//Zeichenkette in das erste Element schreiben
listenanfang->datenSetzen("Element 1");

//in einer Schleife mehrere Elemente anhängen
for (Int32 schleife=2; schleife<4; schleife++)
listenanfang->anhaengen("Element "+schleife);

//die Liste ausgeben
listenanfang->ausgeben();

return 0;
}



Aufgabenstellung:
===============
Erweitern Sie die einfach verkettete Liste mit Objekten so, dass die Liste auch rückwärts ausgegeben werden kann.

Eine Hilfestellung:
* Sie müssen aus der einfach verketteten Liste keine doppelt verkettete Liste machen. Es gibt einen sehr einfachen und kurzen Weg: den rekusrsiven Aufruf einer Methode.


Nun ja, ich könnte diese Aufgabe mit einer doppelt verketteten Liste lösen, aber die Aufgabe sagt ja dass ich es mit dem rekursiven Aufruf einer Methode machen soll, nur wie? Ich speichere ja nur das Nachfolgeelement mit ^next, bräuchte ja ^previous was dann aber wieder doppelt verkettet wäre.

Kann mir bitte jemand helfen?
Danke Gruss Jörn
 
Mal schnell in Pseudocode:

Code:
inverse(pointer pointertyp)
{
  if (pointer != NULL)
  {
    inverse(pointer.next)
    write(pointer.inhalt)
  }
}
 
Hallo ddjm 1984,

hast Du Dein Problem schon gelöst? Ich komme an der gleichen Stelle nicht weiter.
Es währe nett wenn Du mal deine Lösung reinstellen könntest - Danke !!
 
Der Beitrag von Navy stellt das Grundkonzept einfach dar. Man schreibt eine Funktion, die sich rekursiv aufruft und anschließend den momentan aktuellen Wert ausgibt. Dadurch wird der Wert des letzten Aufrufs als erstes ausgegeben usw.
 

Neue Beiträge

Zurück