Doppelt verkettete Liste

lxxn

Mitglied
Hallo,
wieso setzte man prev.next= temp.next nur wenn temp.next!= null ist? Auch wenn temp.next == null wäre muss man doch temp.next = null setzen oder nicht?
Der Fall wird hier gar nicht beachtet? Und wie soll man temp.next.prev = prev sezten wenn temp.next == null wäre?
(Die Methode soll eine übergebene int aus einer doppelt verketteten Liste entfernen)

Code:
public class Node {
int val;
Node next;
Node prev;
}

class List{
int val;
Node next;
}

public void deleteItem(int i){
if (first == null){
return;
}

Node temp = first;

if (first.val == i){
first = first.next;
first.prev = null;
}

while (temp.next != null && temp.val != i){
temp= temp.next;
}

if (temp.val == i){
Node prev = temp.prev;

if(temp.next != null) {
prev.next = temp.next;
}

temp.next.prev=  prev;
}
}
 
Ich mein wieso ist der Code so? Das soll die Musterlösung sein und ich versteh die Lösung so leider nicht. Ist die Lösung etwa falsch?
 
Das ist ne Musterlösung? Ja da ist einiges falsch. Wie du schon sagst "prev.next = temp.next" muss auch gesetzt werden, wenn temp.next null ist, und "temp.next.prev" hingegen kann nur gesetzt werden, wenn das nicht der Fall ist. Außerdem muss man beim Sonderfall "first.val == i" am Ende mit return rausspringen oder den Rest in einen else-Zweig rein tun. Sonst gibts unschöne Nebeneffekte.

lg Kevin
 
Im übrigen löscht die Methode nur das erste Element mit dem Wert i, auch wenn mehrere solcher Elemente vorhanden sind. Ich weiß ja nicht, was genau gewollt ist.
 
Ich glaube, dass du mit deinem Verdacht recht hast.
Meiner Meinung nach gehört es so. Die Abfrage auf null soll die Nullpointer-Exception verhindern.
Java:
if (temp.val == i){
  Node prev = temp.prev;

  if(temp.next != null) {
    temp.next.prev= prev;
  }
  prev.next = temp.next;
}
}

Außerdem würde ich hier noch ein return einfügen
Java:
if (first.val == i){
  first = first.next;
  first.prev = null;
  return;
}

Ich bin davon ausgegangen, dass immer nur das erste passende Element herausgelöscht werden soll.
 

Zurück
Oben