# "Einfach verkettete Liste" rückwärts ausgeben



## ddjm1984 (24. August 2009)

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


----------



## Navy (24. August 2009)

Mal schnell in Pseudocode:


```
inverse(pointer pointertyp)
{
  if (pointer != NULL)
  {
    inverse(pointer.next)
    write(pointer.inhalt)
  }
}
```


----------



## Turri (24. August 2009)

Hallo ddjm1984,

Das Thema wurde hier schon behandelt, 
vielleicht kannst du dir hier was abgucken.

http://www.tutorials.de/forum/c-c/338532-adt-verkette-liste-rueckwaerts-ausgeben-lassen.html

MfG Turri


----------



## ddjm1984 (25. August 2009)

Ok danke erst mal für den Link ich glaub ich les mich da mal durch. So schwer ist das ja wohl hoffentlich nicht


----------



## alpha01 (10. Dezember 2009)

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 !!


----------



## Vereth (10. Dezember 2009)

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.


----------

