LinkedList Methode selbst schreiben

  • Themenstarter Themenstarter GästeStuhl
  • Beginndatum Beginndatum
G

GästeStuhl

Moin soll, für die Uni alle LinkedList Methoden selbst implementieren,
dass hab ich soweit auch ganz gut geschafft aber bei einer komm ich garnicht weiter :(.

Und zwar bei deleteLast(Element x) welche das letzte Vorkommen des Elements x löscht.
Hab leider garkeine idee wie ich da vorgehen muss!

Wäre über ein paar kleine tipps dankbar ;)
 
Hallo,

die Methode heißt zwar etwas anders, aber das ist erstmal egal. :-)

Wie ist deine Liste implementiert? Zeigt das letzte Element auf das erste? Ist es eine doppelt-verkettete Liste?
Je nachdem, wie sie implementiert ist, ist das vorgehen anders.

Gruß

Sascha
 
Hallo,
es ist eine einfach verkettete Liste ohne Zeiger auf das letzte Element (leider)!
 
Ja, die sieht so aus:

public void remove(Element x) {
LinkedList l = find(x);
if (l != null) {
l.next = l.next.next;
}
}
 
Du solltest deine find-Methode so implementieren, dass du dort noch zusätzlich einen Startzeiger mitgeben kannst.
Code:
public void removeLast(Element x) {
   removeLast(startZeiger, x);
}

private boolean removeLast(LinkedList l,Element x){
   boolean toReturn = false;
   LinkedList tmp = find(l , x);
   if (tmp != null) {
        
      toReturn = removeLast(tmp.next.next);
      if(!toReturn){
         tmp.next = tmp.next.next;
         toReturn= true;
      }
   }
   return toReturn;
}

Hab das ganze jetzt mal schnell hier geschrieben, kann sein, dass noch kleinere Fehler drin sind, aber du solltest zumindest einen Ansatz haben.

Gruß

Sascha
 
Ja, die eine Methode ruft die zweite Methode auf. Die zweite Methode ruft sich selbst rekursiv auf. Wenn du schaust, sind es nicht exakt die gleichen Methoden, die eine hat mehr Übergabeparameter.

Gruß

Sascha
 
Ist das auch möglich mit nur einer Methode? wir sollen das glaub ich nur mit der gegebenen Methode lösen
 
Von außen ist auch nur die eine Methode aufrufbar. Die andere ist ja privat.

Sicher ist es auch nur in einer Methode lösbar. Du musst den rekursiven Ansatz nur zu einem Iterativen umbauen. Das Prinzip ändert sich da nicht.

Gruß

Sascha
 
Zurück