habe ein kleines Verständnissproblem. Habe hier eine Doppelte verkette Liste (selber implementiert) die 3 Objekete enthält.
Das erste zeigt natürlich auf null und zwei, das zwiete auf 1 und 3 und das dritte auf 2 und null. Dazu haben wir auch eine Remove Methode, die allerdings für mich keinen Sinn ergibt, sobald 3 Objekte in der lsite sind. Bei 2 macht es Sinn
Java:
if(i ==0){// ersten entfernen
p = first;
first = first.getNext();
p.setNext(null);if(first !=null){
first.setPrevious(null);
Falls ich jetzt 3 Objekte first,second und last in der Liste habe, passiert ja folgendes (meines wissens nach)
- p zeigt auf first.
- Das neue first ist das nachfolgende vom alten, also second.
- p.setNext(null) ist doch aber last oder? (Hier habert es, aber evtl. übersehe ich ja etwas oder verstehe etwas falsch...)
Du überschreibst doch wieder dein neues Element wenn du p.setNext(null) machst oder nicht? ISt schon lange her...
Dein Programm sollte natürlich auch bei n Einträgen mit dem löschen klar kommen...
Du musst deine Zeiger richtig umpolen...
Das heisst, dass wenn dein erster Eintrag gelöscht wird dein zweiter Eintrag sich als vorgänger nun den vorgänger des ersten elementes(das zu löschende) merkt.
Ach ja, deine Liste ist ja doppelt verkettet...
Der vorgänger vom zu löschenden Wert merkt sich als nachfolger das folgende vom löschenden Element.
Oh sorry ich hätte noch erwähnen sollen dass das die lösung ist vom Prof und die ist lauffähig fur n Elemente, dennoch kann ich es nicht nachvollziehen...
Generell gilt beim Entfernen, dass die Zeiger des zu löschenden Elements unrelevant sind und nur die der restlichen Liste so abgeändert werden müssen, dass das alte Element nicht mehr referenziert wird UND dass die verbleibenden Listenelemente korrekt verkettet sind.
Das erfordert etwas Nachdenken, welche Zeiger sich dann ändern müssen (pauschal gesagt, nur die des Vorgängers und Nachfolgers), und eventuelle Fallunterscheidungen, wenn beim Löschen von ersten und letzten Elementen etwas anderes passieren muss als beim Löschen anderer Elemente.
//p = temporäres Element//first = aktueller Zeiger auf das erste Elementif(i ==0){// ersten entfernen //Wenn wir beim index 0 sind
p = first;// aktuelles erstes element zwischenspeichern
first = first.getNext();//Zeiger auf erstes element zeigt ab jetzt auf das 2te element der liste
p.setNext(null);//das ehemalige erste element hat keinen nachfolger mehr (soll ja entfernt werden)if(first !=null){//gab es überhaupt mehr als 1 element?
first.setPrevious(null);//das neue erste element darf natürlich nicht mehr das alte erste element als vorgänger gesetzt haben