public class DoubleNode { Object data; DoubleNode next; // nächstes Element DoubleNode prev; // vorhergehendes Element // Konstruktor, setzt die beiden Zeiger auf null // und gibt einen Info-Text aus public DoubleNode() { next=prev=null; // Null-Wert eintragen System.out.println("Neues Element erzeugt: " + this); } // Zweiter Konstruktor, der ein NEUES Element hinter // ein BESTIMMTES (Parameter) in die Liste // EINFÜGT public DoubleNode(DoubleNode vorgaenger) { this.prev = vorgaenger; // Klar this.next = vorgaenger.next; // Zeiger merken vorgaenger.next = this; // NUR, wenn this.next nicht null ist // (kein Listenende), darf der Vorgänger // des Nachfolgers gesetzt werden. // (Auch mal ausprobieren, was passiert, wenn // das "if(...)" weggelassen wird. if(this.next != null) this.next.prev = this; System.out.println("Neues Element erzeugt: " + this + " und hinter " + vorgaenger + " eingefügt."); } // Fügt ein neues Element am ENDE der Liste ein public void append_new() { DoubleNode ende; for(ende= this; ende.next != null; ende=ende.next) System.out.println("Ende noch nicht erreicht, suche weiter..."); System.out.println("Ende gefunden bei: " + ende); new DoubleNode(ende); } public static void main(String[] args) { // Beispiel: Wir bauen eine Liste auf. DoubleNode erstes = new DoubleNode(); DoubleNode zweites = new DoubleNode(); // Verketten (hier manuell) erstes.next = zweites; zweites.prev= erstes; // Testweise ausgeben: System.out.println("erstes.next = " + erstes.next); System.out.println("zweites.prev = " + zweites.prev); new DoubleNode(erstes); new DoubleNode(zweites); // Vom ersten Element aus Ende suchen und neues Element einfügen. erstes.append_new(); } }