#1 15. April 2011 Listen: i-tes element der Liste löschen Hi leute ich hab ein großes Problem ich soll eine Liste Programmieren: dafür stehen mir die beiden Attribute: Code: Link anfang; // 'anfang' verweist auf das erste Element der Liste, Link ende; // 'ende' auf das letzte Element. Zu verfügung sowie die methoden dieser Klasse Link: Code: // 'naechster' muss auf ein entsprechendes Folgeelement // zeigen können. public void setNaechster(Link naechster) { this.naechster = naechster; } public Link getNaechster() { return this.naechster; } // Ausserdem soll eine get-Methode geschrieben werden, mit welcher // man Zugang zu 'daten' erhaelt public E getDaten() { return daten; } } Mein Problem ist es das ich eine Methode schreiben die folgendes machen soll: Code: // Löscht das i-te Element der Liste und fügt es am Ende wieder ein. // Zählung beginnt am Anfang der Schlange bei i == 1. bis jetzt habe ich es geschafft das ich das i-te Element finde und hinten dran hänge aber ich kann das Element irgendwie nicht löschen da ich dafür den Vorgänger brauch da es nur eine einfach Verketteliste. Meine Lösung sieht bis jetzt so aus: Code: public void erneutAnstellen(int i) { Link helfer = anfang; Link victim = helfer; Link HelferZwei=anfang; Link victimZwei = HelferZwei; for(int k = 1; k<=i; k++) { victim=helfer; helfer=helfer.getNaechster(); System.out.println("bin bei Link: "+k); } anstellen((E)victim.getDaten()); } Die Methode anstellen sorgt dafür das sich victim wieder am ende der liste einfügt. + Multi-Zitat Zitieren
#2 15. April 2011 AW: Listen: i-tes element der Liste löschen naja du brauchst einfach nur ne variable, die den vorgaenger speichert. bzw das element i-1. den nachfolger von i-1 setzt du dann auf i+1 und schon ist das element aus der liste verschwunden wenn ich mich nicht irre musst du bei deinem code nur folgendes umbasteln: Code: public void erneutAnstellen(int i) { Link helfer = anfang; Link victim = helfer; Link HelferZwei=anfang; Link victimZwei = HelferZwei; for(int k = 1; k<i; k++) { victim=helfer; helfer=helfer.getNaechster(); System.out.println("bin bei Link: "+k); } anstellen((E)helfer.getDaten()); victim.setNaechster(helfer.getNaechster()); } so haelt deine schleife beim element i-1 an und in "helfer" is das element, dass du loeschen willst gespeichert + Multi-Zitat Zitieren
#3 15. April 2011 AW: Listen: i-tes element der Liste löschen Da ich mich mit Java nicht auskenne und ich nicht weiß was Link bei dir ist, fasse ich die Antwort etwas algemeiner. Bei einer Liste zeigt ja eine Referenz immer auf das nächte Element. Das heißt du musst einfach wenn du bei dem element i-1 bist Element._next in lastElement._next speichern und sagen Element._next = Element._next._next dann steht dein Element an letzer stelle. Anschließend setzt du noch lastElement = lastElement._next und schon bist du fertig Achtung lösung ist in C# müsste aber 1:1 auf Java übertragbar sein + Multi-Zitat Zitieren
#4 15. April 2011 AW: Listen: i-tes element der Liste löschen das war es was mir gefehlt hat. danke an euch beiden hatte vergessen das Vorgänger von i i-1 ist hab es jetzt so gelöst indem ich eine zweite for-schleife laufen lasse die bis i-1 geht thx euch beiden. Ich bräuchte aber neue hilfe mit meinem selbst gemachten Iterator :/ der will nicht sowie ich will bekomm andauert eine Exception in thread "main" java.lang.NullPointerException =( kennt sich jemand hier gut mit java aus und kann mal mein ganzen quell code checken und nach fehlern prüfen weil ich keine finde =( + Multi-Zitat Zitieren
#5 17. April 2011 AW: Listen: i-tes element der Liste löschen du musst einfach überprüfen ob helfer.getNaechster() == null wenn er das ist einfach abbrechen. + Multi-Zitat Zitieren