verkettete Liste

bandy

Bekanntes Mitglied
Hallo an alle!!
Brauche mal wieder eure Hilfe. Ich habe eine Aufgabe zu loesen, bei der ich seit wochen nicht weiter komme. Entweder weil es schlecht erklaert worden ist, oder weil es sehr kompliziert ist, oder beides. Es geht hierbei um den Umbau einer einfach verketetten Liste!
Hier die Aufgabenstellung:


Erweitern Sie die Aufgabe der einfach verketteten Liste so, dass das Listenende beim Anhaengen nicht immer wieder neu ermittelt werden muss, sondern neue Elemente direkt am Ende der Liste angehaengt werden koennen.

Dazu ein paar Hilfestellungen:

*Sie muessen neben dem Anfang der Liste jetzt auch das Ende der Liste in einer Instanz speichern koennen.
*Erstellen Sie eine Methode, die Ihnen das aktuelle Ende der Liste zurueckliefert. Alternativ koennen Sie sich
das Listenende auch von der Methode zum Anhaengen liefern lassen.
*Setzen Sie den Wert der Instanz fuer das Listenende nach dem Anhaengen neuer Elemente jeweils auf das aktuelle
Ende der Liste und rufen Sie dann die Methode zum Anhaengen neuer Listenelemente mit diesem Wert neu auf.


Und hier der Quelltext der Aufgabe:
[JAVA=42]

class Listenelement{
String daten;
Listenelement naechster;

void setDaten(String datenNeu){
daten=datenNeu;
naechster=null;
}

void anhaengen(String datenNeu){
if (naechster==null){
naechster=new Listenelement();
naechster.setDaten(datenNeu);
}
else
naechster.anhaengen(datenNeu);
System.out.println("Daten "+datenNeu+" wurden eingefuegt.");
}
void ausgeben() {

if (naechster != null)
naechster.ausgeben();
System.out.println(daten);
}
}
public class Hausaufgabe2 {


public static void main(String[] args) {

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


}

}
[/code]

Hat jemand eine Idee wie man die Aufgabe loesen kann????:(
 

javimka

Top Contributor
Ich würde eine neue Klasse Liste schreiben, der du dann Listenelemente anhängen kannst. Diese neue Klasse soll dann ständig das erste und letzte Element gespeichert haben, so dass man schnell darauf zugreifen kann.
 

jule37

Aktives Mitglied
halte doch einfach eine referenz auf das ende der liste, die immer aktualisiert wird, wenn ein element angehängt wird

pseudocode
Java:
public class List {

    private Node head;
    private Node tail;

    ...

    public void add(Node node){
    
        tail.next = node;
        tail = tail.next;
    }
}

public class Node {
    public Node next;
    public Object data;
}

und schon läuft das :)
 

bandy

Bekanntes Mitglied
Naja, ich denke es wird nicht ganz das gesucht was hier vorgeschlgen wird. Die wollen von uns eine Methode haben, keine Klasse! Hier nochmal der Ausschnitt aus der Aufgabenstellung:

"*Erstellen Sie eine Methode, die Ihnen das aktuelle Ende der Liste zurueckliefert. Alternativ koennen Sie sich das Listenende auch von der Methode zum Anhaengen liefern lassen."

Also so etwas:
[JAVA=1]void ende(){

}[/code]

Dann wollen die noch das:

"*Sie muessen neben dem Anfang der Liste jetzt auch das Ende der Liste in einer Instanz speichern koennen."

Ich nehme an, dass es dann so etwas ist:

[JAVA=1]Listenelement ende;
[/code]Also Variable vom Typ der Klasse.
Aber wie das ganze Umbauen und was ich dann beim alten Quelltext weglassen muss ist hier die Frage fuer mich. Danke aber trotzdem fuer Vorschlaege, warte auf weitere.
 

Michael...

Top Contributor
bandy hat gesagt.:
Die wollen von uns eine Methode haben, keine Klasse!
Man soll in die bestehende Klasse eine Methode einfügen und darf dazu bestehende Methoden anpassen:
*Setzen Sie den Wert der Instanz fuer das Listenende nach dem Anhaengen neuer Elemente jeweils auf das aktuelle
Ende der Liste und rufen Sie dann die Methode zum Anhaengen neuer Listenelemente mit diesem Wert neu auf.

Siehe Post von Jule37
 

Wortraum

Bekanntes Mitglied
Warum sollte man in ein Listenelement das Wissen einer Liste stopfen? Ein Element kann den Vorgänger und den Nachfolger kennen, aber warum soll es etwas über das Ende wissen? Da sich das Ende ändert, müßte zudem bei allen Elementen das Ende aktualisiert werden, sobald ein Element angehängt wird. :toll:

Ich sehe hier das Problem, daß Liste und Listenelement in einen Topf geworfen und dann ordentlich vermischt wurden. listenAnfang.ausgeben() bedeutet eigentlich liste.ausgeben(), und listenAnfang.einfuegen() bedeutet liste.anhaengen(). In einem Listenelement selbst werden übrigens die Nachfolger vergessen, wenn man die Daten ändert.

Vielleicht ist das folgende gemeint, aber das ist weder schön, noch sollte das jemandem gelehrt werden (man verzeihe mir, daß ich den Quelltext richtig einrücke):
Java:
public class Listenelement {
    private String daten;
    private Listenelement naechster;
    private Listenelement ende = this;

    public void setDaten(String datenNeu) {
        daten = datenNeu;
        naechster = null;
        /* Alle Nachfolger gehen verloren, wenn neue Daten gesetzt werden! */
    }

    public Listenelement anhaengen(String datenNeu) {
        if (ende == this) {
            naechster = new Listenelement();
            naechster.setDaten(datenNeu);
            ende = naechster;
            System.out.println("Daten " + datenNeu + " wurden eingefuegt.");
        } else {
            ende = ende.anhaengen(datenNeu);
        }
        return ende;
    }

    public void ausgeben() {
        if (naechster != null) {
            naechster.ausgeben();
        }
        System.out.println(daten);
    }
}
Das ist ein ziemliches Durcheinander. :shock: Nun hat auch jedes Listenelement eine Variable ende, aber nur beim ersten und letzten Listenelement stimmt der Wert immer; wenn man ein anderes Listenelement hat, kann man über das kein Element mehr ans Ende der Liste einfügen, oder anders gesagt: dort ist die Variable Ende sinnlos. Würde man bei jedem Einfügen das Ende in jedem Element aktualisieren, könnte man beim Einfügen auch gleich wieder alle Elemente durchlaufen.

Bei jedem Einfügen, außer beim ersten, wird einfuegen() nun nur noch zweimal aufgerufen: einmal beim ersten Listenelement, das das Ende kennt, dann bei ende.einfuegen() aus, womit ein neues Listenelement eingefügt wird. Jedes Endelement erkennt, daß es selbst das Ende ist (ende == this) und hängt ein neues Element an.
 

bandy

Bekanntes Mitglied
Warum sollte man in ein Listenelement das Wissen einer Liste stopfen? Ein Element kann den Vorgänger und den Nachfolger kennen, aber warum soll es etwas über das Ende wissen? Da sich das Ende ändert, müßte zudem bei allen Elementen das Ende aktualisiert werden, sobald ein Element angehängt wird. :toll:

Ich sehe hier das Problem, daß Liste und Listenelement in einen Topf geworfen und dann ordentlich vermischt wurden. listenAnfang.ausgeben() bedeutet eigentlich liste.ausgeben(), und listenAnfang.einfuegen() bedeutet liste.anhaengen(). In einem Listenelement selbst werden übrigens die Nachfolger vergessen, wenn man die Daten ändert.

Vielleicht ist das folgende gemeint, aber das ist weder schön, noch sollte das jemandem gelehrt werden (man verzeihe mir, daß ich den Quelltext richtig einrücke):
Java:
public class Listenelement {
    private String daten;
    private Listenelement naechster;
    private Listenelement ende = this;

    public void setDaten(String datenNeu) {
        daten = datenNeu;
        naechster = null;
        /* Alle Nachfolger gehen verloren, wenn neue Daten gesetzt werden! */
    }

    public Listenelement anhaengen(String datenNeu) {
        if (ende == this) {
            naechster = new Listenelement();
            naechster.setDaten(datenNeu);
            ende = naechster;
            System.out.println("Daten " + datenNeu + " wurden eingefuegt.");
        } else {
            ende = ende.anhaengen(datenNeu);
        }
        return ende;
    }

    public void ausgeben() {
        if (naechster != null) {
            naechster.ausgeben();
        }
        System.out.println(daten);
    }
}
Das ist ein ziemliches Durcheinander. :shock: Nun hat auch jedes Listenelement eine Variable ende, aber nur beim ersten und letzten Listenelement stimmt der Wert immer; wenn man ein anderes Listenelement hat, kann man über das kein Element mehr ans Ende der Liste einfügen, oder anders gesagt: dort ist die Variable Ende sinnlos. Würde man bei jedem Einfügen das Ende in jedem Element aktualisieren, könnte man beim Einfügen auch gleich wieder alle Elemente durchlaufen.

Bei jedem Einfügen, außer beim ersten, wird einfuegen() nun nur noch zweimal aufgerufen: einmal beim ersten Listenelement, das das Ende kennt, dann bei ende.einfuegen() aus, womit ein neues Listenelement eingefügt wird. Jedes Endelement erkennt, daß es selbst das Ende ist (ende == this) und hängt ein neues Element an.

Hast mich richtig verstanden und geholfen, nur das die Liste bei Dir Rueckwaerts ausgegeben wird, aber das habe ich schon hingekriegt:applaus:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
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
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
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
N Verkettete liste rückwärts ausgeben Java Basics - Anfänger-Themen 18
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
V Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 3
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
S Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 12
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
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

Ähnliche Java Themen

Neue Themen


Oben