# LinkedList Methode selbst schreiben



## GästeStuhl (8. Mai 2010)

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


----------



## zerix (8. Mai 2010)

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


----------



## GästeStuhl (8. Mai 2010)

Hallo,
es ist eine einfach verkettete Liste ohne Zeiger auf das letzte Element (leider)!


----------



## zerix (8. Mai 2010)

Hast du die remove-Methode schon implementiert?

Gruß

Sascha


----------



## GästeStuhl (8. Mai 2010)

Ja, die sieht so aus: 

 public void remove(Element x) {
    LinkedList l = find(x);
    if (l != null) {
      l.next = l.next.next;
    }
  }


----------



## zerix (8. Mai 2010)

Du solltest deine find-Methode so implementieren, dass du dort noch zusätzlich einen Startzeiger mitgeben kannst. 

```
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


----------



## GästeStuhl (8. Mai 2010)

Ist das richtig das du jetzt 2 mal die gleich Methode hast?


----------



## zerix (8. Mai 2010)

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


----------



## GästeStuhl (8. Mai 2010)

Ist das auch möglich mit nur einer Methode? wir sollen das glaub ich nur mit der gegebenen Methode lösen


----------



## zerix (8. Mai 2010)

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


----------



## GästeStühl (9. Mai 2010)

Könntest du vllt. nochmal den code schreiben wie du das meinst ?


----------



## zerix (9. Mai 2010)

Eigentlich solltest du es hinbekommen, aus einem rekursiven Ansatz einen iterativen zu schreiben.
Da du jetzt einen Ansatz hast, könntest du erstmal selbst versuchen, es so umzusetzen. Wenn du es nicht schaffst, helfe ich dir gerne.

Hier im Forum wird eigentlich nicht direkt die Lösung gepostet. 

Gruß

Sascha


----------

