Methoden Doppelt verkettete Liste remove(Object)

_Johannes_

Mitglied
Hallo,
ich habe eine Doppelt verkettete Liste erstellt, die soweit auch funktioniert mit den Methoden
insertFirst(o) - Fügt ein Objekt direkt hinter dem Head der Kette ein
insertLast(o) - Fügt ein Objekt direkt vor dem tail der Kette ein
toString() - Gibt mir die Komplette Kette von Head bis Tail aus

Jetzt habe ich die Methode remove(Object), welche die Kette von vorne nach hinten durchsucht und das gewünschte Objekt entfernt (nur das, welches zuerst auftaucht).
Die Methode funktioniert auch, solange ich nicht ein Objekt doppelt in der Liste habe und die remove() Methode zweimal aufrufe.
D.h. ich habe eine Liste mit
[123123]
Rufe ich jetzt liste.remove(3) auf erhalte ich:
[12123]
Dann beim zweiten mal liste.remove(3) sollte dementsprechend
[1212] rauskommen, stattdessen bekomme ich den Laufzeitfehler:
"Exception in thread "main" java.lang.NullPointerException"

Der Fehler liegt nicht in der while-Schleife, welche die Liste absucht, wenn ich das
if(found){...} auskommentiere funktioniert das Ganze.

Hier die remove-Methode:
(Die Listenelemente haben jeweils ein Object als Bezeichner und einen previous und einen next Verweis, und die entsprechenden getter und setter Methoden.

Ich komme kein Stück weiter, über einen Tipp wäre ich Froh,
Danke
Java:
 public void remove(Object a){

        boolean found = false;
        actual = head;

        while(actual!=null){

            if(actual.getObject().equals(a)){
                found=true;
                break;
            }

            actual=actual.getNext();
           
        }
       
        if(found){
            actual.getPrevious().setNext(actual.getNext());
            actual.getNext().setPrevious(actual.getPrevious());
        }
       
       
    }
 

Meniskusschaden

Top Contributor
Enhält deine Listenimplementierung nur die eigentlichen Listenelemente oder gibt es noch ein Dummy-Element als Sentinel am Anfang und/oder Ende?
Ich vermute, es liegt nicht daran, dass das Element zweimal enthalten ist, sondern daran, dass du das letzte Element entfernen willst. Ich würde mir mal auf dem Papier aufzeichnen, was dein Programm beim Entfernen des letzten Elementes genau tut. Dann erkennst du das Problem wahrscheinlich.
 

_Johannes_

Mitglied
Ja, Head und Tail sind Dummies, dann schau ich mal. Danke

Edit: Daran liegt es meiner Meinung nach nicht, auch wenn ich die beiden '3' in die Mitte der Liste einlese, bekomme ich beim zweiten Mal removen den Fehler...
 

Bitfehler

Bekanntes Mitglied
Kann es sein, dass wenn du das letzte Element entfernen willst nur der Fehler auftritt?
In dem if, rufst du dann nämlich vom letzten Element getNext() auf. Kann es sein das die Rückgabe davon null ist bzw hast du mal ausgeben, was getNext() vom letzten Element ist?
Sollte das null sein, kann die zweite Zeile im if nicht funktionieren.
 

_Johannes_

Mitglied
EDIT: Habe die if Bedingung jetzt geändert, aber gleicher Fehler :(

Das ist die Listenklasse:
Java:
public class DoublyLinkedList{

    private DLLElement head;  
    private DLLElement tail;
    private DLLElement actual;

    public DoublyLinkedList(){

        head = new DLLElement();
        //head.setObject('[');
        tail = new DLLElement();
        //tail.setObject(']');
        head.setNext(tail);
        head.setPrevious(null);
        tail.setPrevious(head);
        tail.setNext(null);
  
    }

    public void insertFirst(Object a){

        DLLElement neu = new DLLElement();
        neu.setObject(a);
        head.getNext().setPrevious(neu);
        neu.setNext(head.getNext());
        head.setNext(neu);
      
    }

    public void insertLast(Object a){

        DLLElement neu = new DLLElement();
        neu.setObject(a);
        tail.getPrevious().setNext(neu);
        neu.setNext(tail);
        tail.setPrevious(neu);
    }

    public void remove(Object a){

        boolean found = false;
        actual = head.getNext();

        while(actual!=null){

            if(actual.getObject().equals(a)){
                found=true;
                break;
            }

            if(actual.getNext()!=null){
            actual=actual.getNext();
            }
            else{break;}
          
        }
      
        if(found){
            actual.getPrevious().setNext(actual.getNext());
            actual.getNext().setPrevious(actual.getPrevious());
        }
      
    }

    public String toString(){

        String s ="[";

        actual = head.getNext();
        while(actual.getNext() != null){
            s = s+actual.getObject();
            actual=actual.getNext();
        }

        s=s+"]";
      
        return s;
    }
}

Und das die Klasse eines Listenelements:
Java:
public class DLLElement{

    private Object object;
    private DLLElement next;
    private DLLElement previous;  

    public void setObject(Object a){
        this.object=a;
    }

    public Object getObject(){
        return this.object;
    }
  
    public DLLElement getPrevious(){
        return this.previous;
    }

    public void setPrevious(DLLElement a){
        previous = a;
    }

    public DLLElement getNext(){
    return this.next;
    }

    public void setNext(DLLElement a){
        next = a;
    }
}

Über die Mainmethode erstelle ich dann eine Instanz der Klasse DoublyLinkedList und rufe die Methoden auf.
 

_Johannes_

Mitglied
OK, es liegt doch an den Rändern, in dieser Anordnung funktioniert das ganze, am Ende kann die 1 nicht entfernt werden
[]
[3]
[32]
[321]
[3321]
[23321]
[123321]
[12321]
[1221]
[121]
[11]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
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
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
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
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R Datentyp Ring - zyklisch doppelt verkettete Liste - HILFE! Java Basics - Anfänger-Themen 12
R doppelt verkettete Liste Java Basics - Anfänger-Themen 8
F doppelt verkettete liste! Java Basics - Anfänger-Themen 8
R doppelt verkettete azyklische Liste Java Basics - Anfänger-Themen 2
T Klasse in Java für doppelt verkettete Listen Java Basics - Anfänger-Themen 4
H Doppelt verkettete Listen Java Basics - Anfänger-Themen 2
S doppelt verkettete Listen Java Basics - Anfänger-Themen 4
X Vererbung: Doppelt verkettete Listen Java Basics - Anfänger-Themen 16
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
T Löschen in doppelt verketteter Liste Java Basics - Anfänger-Themen 1
L Input/Output Println wird doppelt ausgeführt Java Basics - Anfänger-Themen 11
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
M Liste Implementation, doppelt next() Java Basics - Anfänger-Themen 13
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
Salo Datentypen "Doppelt" List(e) ("gesucht") Java Basics - Anfänger-Themen 6
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
T Java Methode wird unerwünscht doppelt aufgerufen?! Java Basics - Anfänger-Themen 4
OnDemand Doppelt Werte CSV Java Basics - Anfänger-Themen 2
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
E Erste Schritte Sortieren von Objekten in doppelt-verlinkter Liste Java Basics - Anfänger-Themen 9
S Methoden Methode wird doppelt aufgerufen ... Java Basics - Anfänger-Themen 5
J Mehrere Zufallszahlen erzeugen, aber keine darf doppelt erzeugt werden - Wie? Java Basics - Anfänger-Themen 5
B Doppelt gekettete Listen Java Basics - Anfänger-Themen 4
G PropertyChangeListener empfängt Events doppelt Java Basics - Anfänger-Themen 5
L doppelt verkette Liste Java Basics - Anfänger-Themen 5
H Fenster doppelt gezeichnet. Java Basics - Anfänger-Themen 2
G Einfügen aus Zwischenablage - alles doppelt? Java Basics - Anfänger-Themen 2
G JFileChooser kommt doppelt Java Basics - Anfänger-Themen 3
N Nullpointerexception bei Doppelt verketteter Liste Java Basics - Anfänger-Themen 7
M Listen richtig doppelt verkettet? Java Basics - Anfänger-Themen 13
D Exceptions in doppelt verketteter Liste Java Basics - Anfänger-Themen 5
C verify() wird doppelt aufgerufen (JTable + InputVerifier) Java Basics - Anfänger-Themen 8
H doppelt verkette liste Java Basics - Anfänger-Themen 2
L rückwärtsausgeben einer doppelt verketteten liste Java Basics - Anfänger-Themen 2
G JList und ListCellRenderer - Vector erscheint doppelt Java Basics - Anfänger-Themen 6
G JComboBox gibt SelectedItem immer doppelt aus Java Basics - Anfänger-Themen 4
B Array doppelt Felder löschen Java Basics - Anfänger-Themen 27
M Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 2
R Zeilen aus datei lesen + doppelt gespeichert? Java Basics - Anfänger-Themen 3
G Trotz Abfrage immer noch Zahlen doppelt Java Basics - Anfänger-Themen 3
R Benutzerregistrierung: Doppelt registriert. Java Basics - Anfänger-Themen 8
M Verkettete Liste Java Basics - Anfänger-Themen 1
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
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
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A Verkettete Liste Java Basics - Anfänger-Themen 2
L verkettete Liste Java Basics - Anfänger-Themen 15
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
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
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
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

Ähnliche Java Themen

Neue Themen


Oben