Verkettete liste rückwärts ausgeben

Nocturnis

Mitglied
das neue element ist immer mit dem vorherigen verknüpft durch Listenelement letzter. Jetzt würde ich das gerne rückwärts ausgeben durch eine rekursion und da haperts bei mir momentan. rekursiv ist die methode "ausgeben" aber sie tut nicht was sie soll... Sie gibt mir nur das Listenende aus aber nicht die vorherigen elemente. vllt hab ich da einen denkfehler beim Listenelement letzter bitte helft mir.
Außerdem würde ich gerne wissen wie ihr das finden des letzten elements ohne einen konstruktor gemacht hättet. (neugierdehalber)
class Listenelement {
String daten;
Listenelement naechster;
Listenelement letzter;
public Listenelement (Listenelement letzter){
this.letzter = letzter;

}
public Listenelement getprev (){
return letzter;
}
void setnext (Listenelement naechster){
this.naechster = naechster;
}
Listenelement getend(){
return Listend;
}

void setDaten(String datenNeu) {

this.daten = datenNeu;

this.naechster = null;
}
static Listenelement Listend = null;
Listenelement hilf=null;
void anhaengen(String datenNeu) {

if (naechster == null) {
naechster = new Listenelement(naechster);
naechster.setDaten(datenNeu);
Listend = naechster;


}

else
naechster.anhaengen(datenNeu);

System.out.println("Daten " + datenNeu + " wurden eingefügt.");
}

void ausgeben() {

System.out.println(daten);
if (letzter != null)
letzter.ausgeben();




}
}
public class aufgtest {
public static void main(String[] args) {

Listenelement listenAnfang = new Listenelement(null);
listenAnfang.setDaten("Element 1");
for (int element = 2; element < 10; element++)
listenAnfang.anhaengen("Element " + element);

Listenelement.Listend.ausgeben();
}
}
 

Nuiton

Bekanntes Mitglied
Die Logik ist ganz easy:
Java:
    Node reverse(Node node) {
        Node prev = null;
        Node current = node;
        Node next = null;
        while (current != null) {
            next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }
        node = prev;
        return node;
    }
 

Nocturnis

Mitglied
so wie bei einer doppelt verketteten liste also. ich dachte nur ich könnte das irgendwie anders machen, so das ich quasi current weglasse und den prev auf den vorherigen next setze.
danke für die hilfe ich werde das gemäß deiner antwort umsetzen.
nichts desto trotz wäre es interressant zu wissen ob es so wie ich es mir dachte funktionieren würde.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
das neue element ist immer mit dem vorherigen verknüpft durch Listenelement letzter.
Wenn ich es richtig sehe (verwende bitte Code-Tags: [code=Java]Dein Code[/code]), dann nicht und das dürfte auch das Problem verursachen sein:
Java:
if (naechster == null) {
    naechster = new Listenelement(naechster);
    ...
müsste lauten
Java:
if (naechster == null) {
    naechster = new Listenelement(this);
    ...

Ansonsten: schmeiß die static-Variable raus. Du kannst die Ausgabe auch von vorne rückwärts ausgeben.
Java:
public void ausgeben() { 
    if (naechster != null) { naechster.ausgeben(); }
    System.out.println(daten);
}
 

matze86

Bekanntes Mitglied
Java:
public void ausgeben() {
    if (naechster != null) { naechster.ausgeben(); }
    System.out.println(daten);
}
Ich muss hier mal dazwischen Fragen, es wird so lange die Methode von sich selbst aufgerufen bis 'naechster' gleich null ist.
Warum werden dann die 'daten' ohne das die Methode aufgerufen wird allesamt nacheinander ausgegeben?
 

Jw456

Top Contributor
erstens ist diser Thread schon alt.

Es wird ja die Methode Ausgabe den nechten Objekt aufgerufen mit "naechster.ausgeben();"
wie bei einem Zug von Wagen zu Wagen der letzte ist null.
Das ist nicht die Methode von dem Wagen in dem du bist sondern die von nechsten Wagen.
 

matze86

Bekanntes Mitglied
Ich habe bei den Code mal verschiedene println eingebaut.
Erst wird als erstes nur 1 und 2 ausgegeben, wenn "naechster" null ist wird nur noch 3 und die Daten ausgegeben. Was ich nicht verstehe, warum dann nicht 1 ausgegeben wird und in der if-Anweisung nur noch 3 und nicht die 2.
Da ist man ja quasi in der if-anweisung, aber wird die 2 nicht ausgegeben. Warum verstehe ich nicht.

Java:
public void ausgeben() {
    System.out.println("1 " + naechster);
    if (naechster != null) {
        System.out.println("2 " + naechster);
        naechster.ausgeben();
        System.out.println("3 " + naechster);
                           }
    System.out.println(daten);
}
 

Jw456

Top Contributor
Ausgabe nur 3 kann nicht sein.

Bei drei Wagen
1
2
3
Daten

1
2
3
Daten

1
Daten
Wenn es anders ist hast du deine Liste nicht richtig erstellt.


Versuche es zuverstehen du bist immer wider in einen neuen Objekt auch wenn die beim duchgehen mit den Debugger gleich aussehen.
Du hast eine Klasse den Bauplan und von diesem hast du viele Objekte (Wagen) erstellt die alle gleich ausschauen aber eine andere ladung haben.
 

mihe7

Top Contributor
Warum werden dann die 'daten' ohne das die Methode aufgerufen wird allesamt nacheinander ausgegeben?
Warum nicht? Die Liste soll ja rückwärts ausgegeben werden.

Nehmen wir mal eine Liste mit drei Elementen, die ich mal als element1, element2 und element3 bezeichne und die in genau dieser Reihenfolge auch verkettet sind. Ablauf:

Code:
element1.ausgeben():
  naechster == element2, also nicht null, also folgt folgender Aufruf
  element2.ausgeben():
    naechster == element3, also nicht null, also folgt folgender Aufruf
    element3.ausgaben():
      naechster == null, also wird daten (von element3) ausgegeben
      Die Methode endet und kehrt zum Aufrufer zurück
    element3.ausgeben ist nun abgeschlossen, es wird daten (von element2) ausgegeben
    Die Methode endet und kehrt zum Aufrufer zurück
  element2.ausgeben ist nun abgeschlossen, es wird daten (von element1) ausgegeben
  Die Methode endet und kehrt zum Aufrufer zurück
Fertig.

Klar?
 

Jw456

Top Contributor
Eine einfach verkette Liste kannst du nicht von hinten durgehen.
Das Ende kennst du ja nicht.

Edit mihe7 . Ok so würde es gehen.
 
Zuletzt bearbeitet:

matze86

Bekanntes Mitglied
Eine Frage, nachdem ich es soweit verstanden habe bleibt aber noch, warum kehrt (siehe #13 Zeile 7) die Methode zum Aufrufer zurück und die Methode wird nicht beendet?
Normalerweise wird ja bei einen Programm der Code von oben nach unten abgearbeitet.
 

kneitzel

Top Contributor
Das ist doch generell das Vorgehen bei Methodenaufrufen: die Methode wird aufgerufen und wenn die Methode fertig ist, dann geht es hinter dem Aufruf weiter.

Sonst würde das ja alles nicht funktionieren, denn vieles sind ja Methodenaufrufe: println bei einer Ausgabe oder die nextInt oder so Aufrufe beim Scanner.
 

Jw456

Top Contributor
Mit Zeile 7. meint er das die Methode sich selbst t nicht weiter aufruft und beendet. Nun werden alle Aufgerufen Methoden rückwärts wider beendet nicht aufgerufen.

Du bist ja die Kette vorwärts durchgegangen, ausgaben und beenden hast du noch nicht gemacht. Jetzt bist du im letzten Element dort machst du die Ausgabe die Methode wird beendet.



Beim aufruf einer Methode wird der Rücksprung auf einen Stapel im Speicher gelegt. Der am Ende abgearbeitet wird. Also es wird die Ausgabe gemacht und die Methode beendet. beim Beenden vom Stapel entfernt.
.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
V Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 3
S Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 12
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
H Verkettete Liste Java Basics - Anfänger-Themen 7
K Verkettete Liste und seine Methoden Java Basics - Anfänger-Themen 1
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
G 2 Aufgabe rund um eine verkettete Liste Java Basics - Anfänger-Themen 2
O Verkettete Liste Java Basics - Anfänger-Themen 10
E Methoden auf von Methoden erstellte Objekte zugreifen (verkettete Liste) Java Basics - Anfänger-Themen 10
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
S Doppelt verkettete Liste Java Basics - Anfänger-Themen 3
G Doppelt Verkettete Liste Java Basics - Anfänger-Themen 2
A Doppelt Verkettete Liste Java Basics - Anfänger-Themen 16
E doppelt verkettete liste Java Basics - Anfänger-Themen 10
V Verkettete Liste. Java Basics - Anfänger-Themen 7
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Verkettete Liste - Methode entwerfen Java Basics - Anfänger-Themen 14
B Insertionsort verkettete Liste Java Basics - Anfänger-Themen 4
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
R verkettete liste ansEndeSchieben Java Basics - Anfänger-Themen 13
T Verkettete Liste Java Basics - Anfänger-Themen 14
A Klassen Innere Klassen, verkettete Liste Java Basics - Anfänger-Themen 9
B Zweifach-verkettete Liste umkehren Java Basics - Anfänger-Themen 6
X verkettete Liste Java Basics - Anfänger-Themen 13
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
kae verkettete Liste Java Basics - Anfänger-Themen 5
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
B OOP Verkettete Liste Java Basics - Anfänger-Themen 7
R verkettete liste Java Basics - Anfänger-Themen 5
M Verkettete Liste Java Basics - Anfänger-Themen 4
M verkettete liste Java Basics - Anfänger-Themen 7
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
B verkettete Liste Java Basics - Anfänger-Themen 8
S zyklisch verkettete Liste erstellen Java Basics - Anfänger-Themen 3
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
J verkettete Liste Java Basics - Anfänger-Themen 2
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 5
M verkettete Liste auslesen Java Basics - Anfänger-Themen 7
K eigene verkettete Liste Java Basics - Anfänger-Themen 4
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
A Eine verkettete Liste Java Basics - Anfänger-Themen 43
G verkettete lineare Liste Java Basics - Anfänger-Themen 2
L verkettete Liste - Ausgabeproblem Java Basics - Anfänger-Themen 2
G Wie kann ich eine verkettete Liste in ein JTable einfügen? Java Basics - Anfänger-Themen 7
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
R ArrayList Objekt -> verkettete Liste Java Basics - Anfänger-Themen 4
R verkettete Liste Java Basics - Anfänger-Themen 13
R verkettete Liste in und aus Datei Java Basics - Anfänger-Themen 5
M Doppelt verkettete Liste Zeiger Vorgänger beim Einfügen Java Basics - Anfänger-Themen 2
J doppelt verkettete Liste Java Basics - Anfänger-Themen 5
L doppelt verkettete Liste Java Basics - Anfänger-Themen 6
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
G Dopplelt verkettete liste Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4
R Datentyp Ring - zyklisch doppelt verkettete Liste - HILFE! Java Basics - Anfänger-Themen 12
E einfach verkettete liste, nullPointerException Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben