Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
*######################################
* Eine verkettete Liste Version 2
######################################*/
//die Klasse für die Listenelemente
//jetzt auch mit Methoden
class Listenelement {
String daten;
Listenelement naechster;
//die Methode zum Setzen der Daten
void setDaten(String datenNeu) {
//die Zeichenkette setzen
daten = datenNeu;
//das Ende markieren
naechster = null;
}
//die Methode zum Anhängen eines neuen Elements
//sie ruft sich rekursiv auf, bis das Ende erreicht ist
void anhaengen(String datenNeu) {
//wenn das Ende erreicht ist, ein neues Element erzeugen
if (naechster == null) {
naechster = new Listenelement();
naechster.setDaten(datenNeu);
}
//sonst ruft sich die Methode selbst wieder auf
else
naechster.anhaengen(datenNeu);
//nur zur Veranschaulichung
System.out.println("Daten " + datenNeu + " wurden eingefügt.");
}
//die Methode zur Ausgabe der Liste
//sie ruft sich ebenfalls rekursiv auf, bis das Ende erreicht ist
void ausgeben() {
System.out.println(daten);
if (naechster != null)
naechster.ausgeben();
}
}
public class Java05_10 {
public static void main(String[] args) {
//ein neues Listenelement erzeugen
Listenelement listenAnfang = new Listenelement();
//die Daten im ersten Listenelement setzen
listenAnfang.setDaten("Element 1");
listenEnde.setDaten("element");
//weitere Elemente in einer Schleife einfügen
for (int element = 2; element < 100; element++)
listenAnfang.anhaengen("Element " + element);
listenEnde.anhaengen("element");
//die Liste ausgeben
listenAnfang.ausgeben();
}
}
Hallo Freunde,
Ich habe hier eine Verkette Liste . Wenn ich einen neuen Element einfüge fängt ja die Liste immer von vorne an, bei sehr langen listen dauert das . Kann ich auch einen element direkt an der Liste ende anhängen ohne das die liste von vorne begint ?
Ich habe so eine lösung gefunden . Die Instanz ( listenanfang) zeigt ja immer auf den anfang der liste also das erste element in der liste . Dann kann ich auch eine Instanz erzeugen die das ende der Liste zeigt
Listenelement listenEnde = new Listenelement();
Dann kann ich eine Methode erstellen , die die aktuelle ende der lsite zürückleifert .
Ganz so geht das aber nicht: Du darfst keine neue Instanz erzeugen (das wäre ja dann wie zwei Unterschiedliche Listen). Stattdessen must du explizit dafür sorgen, dass "ende" immer auf's letzte Element zeigt.
0 Einträge:
start == null und ende == null
1 Eintrag
start = ende (!)
>1 Einträge:
start != ende
Wenn die Liste >0 Elemente enthält, und ein neues Element eingefügt wird, zeigt "ende" also immer auf das neu eingefügte Element.
Ganz so geht das aber nicht: Du darfst keine neue Instanz erzeugen (das wäre ja dann wie zwei Unterschiedliche Listen). Stattdessen must du explizit dafür sorgen, dass "ende" immer auf's letzte Element zeigt.
0 Einträge:
start == null und ende == null
1 Eintrag
start = ende (!)
>1 Einträge:
start != ende
Wenn die Liste >0 Elemente enthält, und ein neues Element eingefügt wird, zeigt "ende" also immer auf das neu eingefügte Element.
/*######################################
* Eine verkettete Liste Version 2
######################################*/
//die Klasse für die Listenelemente
//jetzt auch mit Methoden
class Listenelement {
String daten;
Listenelement naechster;
Listenelement listenEnde;
//die Methode zum Setzen der Daten
void setDaten(String datenNeu) {
//die Zeichenkette setzen
daten = datenNeu;
//das Ende markieren
naechster = null;
}
//die Methode zum Anhängen eines neuen Elements
//sie ruft sich rekursiv auf, bis das Ende erreicht ist
void anhaengen(String datenNeu) {
//wenn das Ende erreicht ist, ein neues Element erzeugen undn daten setzen.
if (naechster == null) {
naechster = new Listenelement();
naechster.setDaten(datenNeu);
}
//sonst ruft sich die Methode selbst wieder auf
else
naechster.anhaengen(datenNeu);
//nur zur Veranschaulichung
System.out.println("Daten " + datenNeu + " wurden eingefügt.");
}
//die Methode zur Ausgabe der Liste
//sie ruft sich ebenfalls rekursiv auf, bis das Ende erreicht ist
void ausgeben() {
System.out.println(daten);
if (naechster != null)
naechster.ausgeben();
}
}
public class Java05_10 {
public static void main(String[] args) {
//ein neues Listenelement erzeugen
Listenelement listenAnfang = new Listenelement();
Listenelement listenEnde = new Listenelement();
//die Daten im ersten Listenelement setzen
listenAnfang.setDaten("Element 1");
listenEnde.setDaten("Letzter Element");
//weitere Elemente in einer Schleife einfügen
for (int element = 2; element <3; element++)
{
listenAnfang.anhaengen("Element " + element);
//die Liste ausgeben
listenAnfang.ausgeben();
listenEnde.ausgeben();
}
}
}
Ausgabe in der Console :
Daten Element 2 wurden eingefügt.
Element 1
Element 2
Letzter Element
Habe ich jetzt ein element angehangen oder nur erzuegt ?
Du hast schon wieder zwei getrennte Listen: ListenAnfang und ListenEnde
Lass das Listenelement mal Listenelement sein und implementiere den Algorithmus für das Anhängen in einer Listenklasse. Das Listenelement kannst du als innere Klasse in der Listenklasse definieren. Es kennt nur die übermittelten Daten und seinen Nachfolger und hat ansonsten keine Funktion.
In der Main rufst du dann auf:
Code:
MeineListe liste = new MeineListe();
liste.anhaengen("Super");
liste.anhaengen("funktioniert");