Doppelt verkettete Liste bzw. Zirkulärliste (kleiner Fehler, den ich nicht finde)

Status
Nicht offen für weitere Antworten.

chik

Gesperrter Benutzer
Hallo zusammen,

ich habe hier eine Zirkulärliste programmiert, die folgendermaßen aussieht:
Jedes Listenelement hat einen Wert und zwei Zeiger. Einer zeigt auf das nächste element und einer auf den Anfang.
Das letzte Element zeigt auf das Erste.

Also ich hatte es hin und her probiert und mit zwei Elementen hatte es funktioniert, beim dritten wurde dann das zweite element einfach immer überschrieben.
Jetzt habe ich es umprogrammiert und folgende Fälle überlegt:
1.Liste ist leer if (item == null && anfang.item == null)
2.Es ist bereicht ein Element drin und deshalb wird eine neues leeres Listenelement beim next Zeiger erzeugt
next = new ZirkulaereListe();
next.anfang = this. anfang;
next.insertlast(elem);
3.Der letzte vorherige Aufruf sollte dann von folgenden Code gegriffen werden (item == null && anfang.item != null) weil item sollte ja nun null sein, da es ja ein neues Element ist und Anfang ist ja nun auf Anfang gesetzt.

Leider klappt es nicht, seltsamer weise wird das erste if einfach übersprungen, hier der Code:
Code:
public class ZirkulaereListe { 
private Object item; 
private ZirkulaereListe next; 
ZirkulaereListe anfang;
public ZirkulaereListe() {} 

private ZirkulaereListe(Object i, ZirkulaereListe n) { 
    item = i; 
    next = n; 
} 

public Object insertlast(Object elem) {
    if (item == null && anfang == null) { 
        System.out.println("item == null && anfang == null");
        item = elem;
        anfang = this;
        next = anfang;
    }
    else
    if (item == null && anfang.item != null) { 
        item = elem;
        next = anfang;
        System.out.println("item == null && anfang != null");
    } 
    else 
        System.out.println("else");
        next = new ZirkulaereListe();
        next.anfang = this. anfang;
        next.insertlast(elem);

                return elem;
            }

//Die beiden Funktionen hier sind nur zum Testen
    public void ausgabeAnfang(){System.out.println(anfang.item);}

    public void ausgabeNext(){System.out.println(next.item);}
}
Über eure Hilfe wäre ich sehr dankbar, weil x+2 Augen, sehe mehr als meine 2 durch die Erkältung geröteten Augen ;-)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Code:
    } 
    else 
        System.out.println("else");
        next = new ZirkulaereListe();
        next.anfang = this. anfang;
        next.insertlast(elem);

                return elem;
            }
->


Code:
    } 
    else {
        System.out.println("else");
        next = new ZirkulaereListe();
        next.anfang = this. anfang;
        next.insertlast(elem);
    }
    return elem;
}
 

chik

Gesperrter Benutzer
thxs.

jetzt gibt es leider dennoch ein Problem:

Bis zum 2. Element geht alles.
Aber beim 3. Element passiert folgendes:
Das 1 Element zeigt dann auf das 3.Element das zweite geht dann somit verloren.
Hier der aktuelle code:

Code:
public class ZirkulaereListe { 
private Object item; 
private ZirkulaereListe next; 
ZirkulaereListe anfang;
public ZirkulaereListe() {} 

private ZirkulaereListe(Object i, ZirkulaereListe n) { 
    item = i; 
    next = n; 
} 

public Object insertlast(Object elem) {
    if (item == null && anfang == null) { 
        System.out.println("item == null && anfang == null");
        item = elem;
        anfang = this;
        next = anfang;
    }
    else
    if (item == null && anfang.item != null) { 
        item = elem;
        next = anfang;
        System.out.println("item == null && anfang != null");
     } 
    else {
        System.out.println("else");
        next = new ZirkulaereListe();
        next.anfang = this. anfang;
        next.insertlast(elem);
    }
    return elem;
}

public Object removefirst() { 
    if (item != null) { 
        Object res = item; 
        item = next.item; 
        next = next.next; 
        return res; 
    } 
    return null; 
}
 
public Object removelast() { 
    return (item == null) ? 
    null : (next.item == null) ? removefirst() : 
    next.removelast(); 
}

// suchen 
    public Object search(Object elem) { 
        return (item == null) ? 
        null : (item.equals(elem)) ? item : 
        next.search(elem); 
} 

// Liste ausgeben 
    public String toString() { 
        return (item == null) ? "" : item.toString() + " " + 
        next.toString(); 
    }
    
    public void ausgabeAnfang(){System.out.println(anfang.item);}

    public void ausgabeNext(){System.out.println(next.item);}
}
 
S

SlaterB

Gast
erstmal:
toString() nie aufrufen, da ist ja eine Endlosschleife drin, da musst du noch prüfen, ob z.B. next == anfang oder so

-----

du postest keinen Programmablauf, ich nehme aber mal an, du fügst deine neuen Elemente immer ins allererste Listenelement ein
(die weiteren ZirkulaereListe-Objekte werden ja auch nicht zurückgegeben/ sind nicht abfragbar),
in der insertlast()-Methode kennst du nur die Fälle 'bei mir einfügen', 'bei next einfügen' + 'neues next',

nicht aber, dass next schon vorhanden und belegt ist,
dann musst du das neue Element nämlich an next weiterreichen
und dort muss die ganze Überlegung von vorne beginnen,
könnte ja sein, dass next.next auch schon voll ist,

Vorsicht: nicht an next weiterreichen, wenn next anfang ist, sonst Endlosschleife des Umherreichens (ähnlich toString())
 

chik

Gesperrter Benutzer
Vielleicht hilft es Jemanden mal irgendwann:

Code:
public class ZirkulaereListe {
private Object item;
// die verschiedenen Zeiger
private ZirkulaereListe next;
private ZirkulaereListe anfang;
private ZirkulaereListe runner;
private ZirkulaereListe temp;
//Der Hauptkonstruktor
public ZirkulaereListe() {}

//Die Methode zum einfügen am Ende einer Liste
public void einfuegen(Object elem) {
   //Liste-Leer Fall
   if (item == null && anfang == null) {
       item = elem;
       anfang = this;
       next = anfang;
   }
   //Allg. Fall
   else {
       runner = this;
       //zum Ende der Liste laufen
       while (runner.next != this.anfang)
       {
           runner = runner.next;
        }
       //Zeiger anpassen
       runner = runner.next = new ZirkulaereListe();
       runner.anfang = this.anfang;
       runner.next =runner.anfang;
       runner.item = elem;
   }
}

public void loeschen(int z){
    runner=anfang;
    //Zur Stelle z gehen (gemäß Skript)
    for (int i=1; i<=z-1; i++)
    {runner = runner.next;}
    System.out.println("Zum löschen ausgewählte Zahl: " + runner.item + " an der gewählten Stelle: " + z + " (Siehe oben)");
    //Spezialfall für das 1.Element
    if (runner == anfang){
    runner.item = runner.next.item;
    runner.next = runner.next.next;
    }
    else
        //Spezialfall wenn nur noch 2 Elemente ex.
        if (runner.next.next == runner)
        {
            anfang.next = anfang;
        }
            //Letztes Element löschen
            else
                if (runner.next.next != runner && runner.next == anfang)
                    {
                        temp=this;
                        //Gehe zum vorletzten Element
                        while (temp.next != runner)
                            {
                                temp = temp.next;
                            }
                        //Setzte vorletztes Element auf den Anfang
                        temp.next = anfang;
                    }
                    //Allg. Fall
                    else
                    {
                        runner.item = runner.next.item;
                        runner.anfang = runner.next.anfang;
                        runner.next=runner.next.next;}
                        ausgaben();
}
   //Ausgabe Funktion, welche alle vorhandenen Daten ausgibt.
   public void ausgaben(){
    System.out.println("==============" + "Ausgabe" + "==============");
    runner = anfang;
    //Nur 1 Element Fall
    if (runner.next == anfang) {
        System.out.println(runner.item);
        return;}
    //Allg. Fall
    do{
    System.out.println(runner.item);
           runner = runner.next;
    }while (runner != this.anfang);
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
R doppelt verkettete Liste: Fehler beim Einfügen Allgemeine Java-Themen 3
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
J Doppelt verkettete Liste Allgemeine Java-Themen 6
M doppelt verkettete Listen Allgemeine Java-Themen 2
L Doppelt Verkettete Listen Allgemeine Java-Themen 6
M doppelt verkettete Listen? Allgemeine Java-Themen 5
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
D "Paste" String doppelt Allgemeine Java-Themen 14
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
N Fehler abfang läuft doppelt durch Allgemeine Java-Themen 2
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
M Alles doppelt in Eclipse syntaxhilfe Allgemeine Java-Themen 6
C Vier Stellen Keine Doppelt (Zufall) Allgemeine Java-Themen 20
G Array doppelt verkettet? Allgemeine Java-Themen 6
L doppelt gelinkte liste /getFirst/removeFirst/clear/Remove Allgemeine Java-Themen 2
S Thread wird nach erneutem Instanzieren doppelt gestartet!? Allgemeine Java-Themen 4
I Doppelt verkette Listen Allgemeine Java-Themen 2
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
K verkettete Liste Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
T Verkettete Suche Allgemeine Java-Themen 6
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
D Einfach verkettete Liste Allgemeine Java-Themen 3
X einfach verkettete Liste und Insertion Sort Allgemeine Java-Themen 3
R Verkettete Liste Allgemeine Java-Themen 5
E Verkettete Listen Allgemeine Java-Themen 5
M Schlange als verkettete Liste Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben