Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen)

V_Fynn03

V_Fynn03

Mitglied
Die Aufgabe lautet, dass wir ein beliebiges Element in einer Liste löschen können. Ich habe auch schon einen Ansatz. Doch ich komme jetzt leider nicht mehr weiter. Ich kann bisher nur das erste und letzte Element löschen. Doch noch keines in der Liste. Also das Dummy läuft durch die Queue bis zum vorletzten Element. Wenn nun der gesuchte Content mit dummy.getNext() übereinstimmt, dann soll gelöscht werden. Ich habe es auch schon so versucht zu programmieren aber irgendwie krieg ich es nicht ganz so hin, wie ich es mir vorgestellt habe.


Ist etwas in meiner Logik falsch oder etwas wie ich es programmiert habe? Kann mir wer helfen das weiter so zu programmieren? Danke
Java:
public void delete(String s) {
        Node dummy = first;
        Node last = getLast();
        Node nach = getNext();

        if(s.equals(first.getContent())) {
        delete();
        }
        else if(getLast().getContent().equals(s)) {
          delete();
        }
        
        while(!(dummy.getNext().getContent().equals(s))) {
            delete();
            dummy=dummy.getNext();
        }
        dummy.setNext(dummy.getNext().getNext());

    }
 
kneitzel

kneitzel

Top Contributor
Also der Code sieht sehr dubios aus. Ohne genaue Details werden wir aber nur raten können.
Wie ist die Liste aufgebaut? Was macht delete()?

Also generell macht es keinen Sinn: egal ob das erste oder letzte Element das zu löschende ist: delete wird aufgerufen.
Und so lange das gesuchte Element nicht das gesuchte ist, rufst du delete auf?

Also bring erst einmal die Details der Liste, die gegeben ist. Und dann beschreib erst einmal in Worten, was du machen musst um ein Element zu finden und zu löschen.
 
V_Fynn03

V_Fynn03

Mitglied
Also die Methode zu delete ist:
Java:
public void delete() {
        first = first.getNext();

    }
Was für Details brauchst du denn genau? s ist ja quasi dass was man eingibt um das zu löschen. Und die Queue soll halt so lange durchgelaufen werden (dummy.getNext().getContent()) bis es eine Übereinstimmung mit s gibt. Dann soll delete() ausgeführt werden. Dummy durchläuft quasi die Queue bis zum vorletzten Element, wenn keine Übereinstimmung gefunden ist. Die ersten Methoden sind ja dafür da um jeweils das erste (first.getContent()) und das letzte Element (getLast()) zu löschen wenn das gesuchte an eben diesen Stellen ist. Ab der while Schleife geht es dann darum ein Element was in der Liste drinnen liegt zu löschen. Bitte korrigiere mich wenn meine Logik nicht stimmt, aber ich weiß nicht wie ich weiter vorgehen soll und was ich bisher vlt schon falsch gemacht habe.
 
kneitzel

kneitzel

Top Contributor
Node wäre interessant. Es handelt sich vermutlich um eine einfach verkettete Liste, aber das wäre schon interessant um das zu bestätigen.

Beschreib doch einmal mit eigenen Worten, was delete genau macht?
Und dann beschreib einmal in eigenen Worten aber sehr detailliert, wie du vorgehen musst, um ein Element zu löschen.
Derzeit dürfte nur das Löschen des ersten Elementes funktionieren.... der Rest des Codes ist so nicht korrekt, aber vergiss das einfach erst einmal. Wir fangen in Ruhe mit der Beschreibung des notwendigen Algorithmus an....

Du hast also eine Liste wie
a -> b -> c -> d -> null
First zeigte auf a.
Last zeigt auf d.
Wie löscht du das a?
wie würdest du b, c oder d löschen?
 
V_Fynn03

V_Fynn03

Mitglied
a lösche ich indem indem ich den ersten Pfeil auf das Element danach richte, sodass kein Pfeil mehr auf a zeigt und somit nicht mehr in der Liste ist. Also das erste Element ist nun das zweite (first=first.getNext()). So in der while Schleife läuft das Dummy nun Element für Element durch die Queue. Es holt sich quasi immer das nächste (dummy.getNext().getContent()) bis irgendwann dieser Inhalt mit dem gesuchten übereinstimmt. Wenn jetzt in c der gesuchte Content ist dann holt sich das Dummy erstmal den Content von a vergleich mit dem gesuchten und geht weiter wenn es nicht übereinstimmt, und das geht dann bis c wo es dann übereinstimmt. Wenn das der Fall ist dann soll delete() ausgeführt werden.
 
kneitzel

kneitzel

Top Contributor
Beschreibe doch einmal mit eigenen Worten, was "delete()" genau macht.

Den Code hast Du mit:
Java:
public void delete() {
        first = first.getNext();
}
angegeben....

Und unabhängig davon: Bitte vergiss delete() bei Beschreibungen. Beschreibe genau, was getan werden soll.

Beim ersten Element hast Du korrekt gesagt:
first wird auf first.next gesetzt. Damit wird auf a nicht mehr gezeigt und a ist damit nicht mehr in der Liste.
(Das ist ja genau, was delete() macht. Also was macht das delete()? Welches Element wird bei delete gelöscht? Wie sollte man delete besser umbenennen? Sowas wie deleteXXXXXX schwebt mir vor...)

Bei c müssen wir was machen? ein first = first.next schmeisst das a raus aus der Liste. Das wollen wir aber doch nicht. c soll aus der Liste geschmissen werden. Also darf nichts mehr auf c zeigen. Was zeigt denn auf c? Und wohin muss das statt dessen zeigen?
 
V_Fynn03

V_Fynn03

Mitglied
Ok wenn c erreicht wird, dann soll der Pfeil vom Element vor c auf das Element nach c zeigen. Heißt ja eigentlich dass ich eine neue delete Methode schreiben müsste extra dafür oder? Sowas wie c = c.getNext() sodass der Pfeil vom Element davor auf das Element nach c zeigt oder?
 
kneitzel

kneitzel

Top Contributor
Nicht ganz, aber fast. Aber du brauchst eine Referenz auf den Vorgänger. Und dann kannst Du vorgänger.next = current.next schreiben.

Also in der while schleife gehst Du so lange weiter, bis Du entweder am Ende angekommen bist (next ist null) oder der gesuchte wert gefunden wurde.
In der Schleife ist dann halt vorgaenger = current und current = current.next.

Nach der Schleife schaust du, ob current auf den gesuchten Wert zeigt um diesen dann zu löschen.
 
V_Fynn03

V_Fynn03

Mitglied
Danke, aber ich verstehe es nicht so ganz, muss ich jetzt eine neue delete Methode schreiben? Und wenn ja wie? Es tut mir ehrlich leid vom logischen und inhaltlichen her verstehe ich es ja, aber ich weiß nicht wo ich jetzt was niederschreiben soll. Muss ich jetzt noch was in der while Schleife ändern?
Ich verlange ja nicht dass du jetzt meinen Quelltext umschreiben sollst, aber wie dekliniere ich jetzt vorgänger und current? Wie lass ich die Methode wissen was vorgänger und current ist?
 
kneitzel

kneitzel

Top Contributor
Also Du hast doch bereits eine Methode, die das Element löschen soll:
public void delete(String s) {

Und wir haben jetzt (mehr oder weniger deutlich) folgenden Pseudocode erarbeitet:
Ist das gesuchte Element das erste Element? -> Setze Zeiger auf erstes Element um.
Wir brauchen Vorgänger (first) und Current (Nachfolger von first).
So lange wie Current nicht null ist und Current nicht den Wert enthält, der gesucht wird:
-> Vorgänger wird Current
-> Current wird Nachfolger von Current.
Nach dieser Schleife ist eines der zwei Abbruchkriterien erfüllt.
Current ist null -> Das Element ist nicht in der Liste vohanden!
Current ist nicht null -> Wir haben jetzt Vorgänger und Current und können den Nachfolger von Vorgänger umsetzen.

Dies ist der Pseudocode, den Du immer als ersten Schritt im Detail selbst erarbeiten solltest. Und dazu das auf einem Zettel durchspielen und sozusagen selbst Computer spielen. Was würdest Du machen und was brauchst Du? Da meiste ist 08/15:
- Mit einer Laufvariable durch die Liste gehen. Das kommt regelmäßig.
- Wenn Du damit aber das Element gefunden hast merkst Du: Du brauchst den Vorgänger. Da Du da halt keinen Pfeil zurück hast, musst Du damit nun schauen, wie Du weiter kommen kannst:
a) Du kannst wie ich einfach den Vorgänger merken. Das ist meist der Weg, den ich bevorzuge.
b) Du kannst current einfach auf den Vorgänger setzen. Damit verschiebst Du alles etwas und damit ändert sich aber natürlich die Schleife:
-> aus current wird der Nachfolger von current
-> aus dem Wert von Current wird der Wert vom Nachfolger von current.
-> Der gesuchte Wert wird also immer im Nachfolger geprüft. Wenn der Wert da gefunden wird, habe ich in current den Vorgänger, das gesuchte Elemente ist der Nachfolger von Current und somit kann ich auch wieder alles machen....

Aus meiner Sicht solltest Du mehr üben, mit diesen abstrakten Datentypen auf einem Zettel zu arbeiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
S beliebiges Datum einlesen, Wochentag eines Datums ermitteln Java Basics - Anfänger-Themen 18
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
S Gibt es ein simples JWebbrowser Element? Java Basics - Anfänger-Themen 6
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
V_Fynn03 Lineare Datenstrukturen Element löschen? Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
M Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ? Java Basics - Anfänger-Themen 19
X Array erstes und letztes Element tauschen Java Basics - Anfänger-Themen 2
A Konsolenausgabe: Hinter letztes Element ein "}" Java Basics - Anfänger-Themen 2
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Element aus Array löschen Java Basics - Anfänger-Themen 5
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
M Array immer wieder um ein Element erweitern Java Basics - Anfänger-Themen 6
AnnaBauer21 org.w3c.dom.Element - Neues Element hinzufügen Java Basics - Anfänger-Themen 4
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
D Selenium Webdrive get x Element Java Basics - Anfänger-Themen 14
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
TechGirl JAVA GUI Oberfläche Umkreisung - wie heißt dieses Element? Java Basics - Anfänger-Themen 2
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
Z Html Element aus der Webseite auslesen Java Basics - Anfänger-Themen 1
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
S Günstigstes Element aus einer ArrayList ausgeben Java Basics - Anfänger-Themen 10
N ArrayList: Das zweite Element wird zur Liste nicht eingefügt nach dem zweiten request. Java Basics - Anfänger-Themen 3
Ruvok Prüfen ob bestimmtest Element existiert im Array Java Basics - Anfänger-Themen 11
A ResultSet: vorheriges Element auslesen Java Basics - Anfänger-Themen 10
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D Fehlermeldung "com.element.JavaUpload.Manager" Java Basics - Anfänger-Themen 1
S Element von List<E> in String umwandeln Java Basics - Anfänger-Themen 3
I Element löschen aus der Liste Java Basics - Anfänger-Themen 2
G element in ArrayList Hinzufügen Java Basics - Anfänger-Themen 16
M ArrayList-Element hinzufügen u. löschen Java Basics - Anfänger-Themen 2
H Möglichkeit, mehrere Element zu speichern Java Basics - Anfänger-Themen 8
P Element aus einer einelementigen Menge bekommen. Java Basics - Anfänger-Themen 8
M Letztes Element im Array finden Java Basics - Anfänger-Themen 3
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2
G Element einem Array hinzufügen Java Basics - Anfänger-Themen 7
Madlip Erste Schritte Das 4. Element?!? Java Basics - Anfänger-Themen 2
B Erstes Element eines Vectors erhalten Java Basics - Anfänger-Themen 5
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
N Array, Element in Array? Java Basics - Anfänger-Themen 8
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
M Map mit Vektor: Element hinzufügen Java Basics - Anfänger-Themen 21
M element aus DB lesen Java Basics - Anfänger-Themen 4
C Variablen array element hinzufügen/entfernen Java Basics - Anfänger-Themen 10
K Letzter element aus einem Array Java Basics - Anfänger-Themen 5
S JDBC MySQL Connector - Element mit ' eintragen? Java Basics - Anfänger-Themen 4
R Element an ArrayList<int[]> "anonym" adden? Java Basics - Anfänger-Themen 3
Glühwürmchen Prüfen ob Element in ArrayList Java Basics - Anfänger-Themen 23
C Ausgewähltes Element einer JCombobox in JTextField Java Basics - Anfänger-Themen 3
L Element in Mitten eines Arrays einfügen Java Basics - Anfänger-Themen 3
S ArrayList nur ergänzen wenn Element noch nicht vorhanden Java Basics - Anfänger-Themen 4
3 3. Element mit regulären Ausdruck suchen Java Basics - Anfänger-Themen 12
S Auf Element in Arry zugreifen Java Basics - Anfänger-Themen 7
M String-Array-Element wieder null zuweisen Java Basics - Anfänger-Themen 16
B Element aus Array entfernen Java Basics - Anfänger-Themen 13
B Element in Folge suchen Java Basics - Anfänger-Themen 7
H Zeiger auf das letzte Element in einer linearen Liste Java Basics - Anfänger-Themen 4
A Array ein element hinzufügen. Java Basics - Anfänger-Themen 6
S element in Array kopieren Java Basics - Anfänger-Themen 12
S Auf Element aus Array zugreifen Java Basics - Anfänger-Themen 6
H LinkedList Element an Stelle x ausgeben? Java Basics - Anfänger-Themen 5
S Datentypen In ArrayList nach Element suchen und Position ausgeben Java Basics - Anfänger-Themen 9
M Wert soll element aus den natürlichen Zahen inkl. 0 sein Java Basics - Anfänger-Themen 6
T Letztes beschriebenes Array-Element ausgeben Java Basics - Anfänger-Themen 6
E TreeSet Element löschen Java Basics - Anfänger-Themen 9
J Stapel oberstes Element entfernen Java Basics - Anfänger-Themen 5
C Erstes Arraylist Element in for Schleife überspringen Java Basics - Anfänger-Themen 6
F jTable - neues Element vorher auf existenz Prüfen Java Basics - Anfänger-Themen 7
P Klasse nach Element casten Java Basics - Anfänger-Themen 4
G Mit Java Quelltext auf Element untersuchen. Java Basics - Anfänger-Themen 5
T Array auf einfaches Element umwandeln Java Basics - Anfänger-Themen 8
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
O i-tes element eingeben? Java Basics - Anfänger-Themen 2
B Delete Methode löscht falsches Element Java Basics - Anfänger-Themen 7
S ArrayList<Element> - "unchecked or unsafe operati Java Basics - Anfänger-Themen 13
N nicht editierbare combobox davon oberstes element auslesen? Java Basics - Anfänger-Themen 5
G Bestimmtes Element in ArrayList finden Java Basics - Anfänger-Themen 3
J Array: Jedem Element direkt denselben Wert zuweisen Java Basics - Anfänger-Themen 6
M ArrayList remove Element? Java Basics - Anfänger-Themen 3
S String: jedes Element mit jedem Java Basics - Anfänger-Themen 31
C element aus ArrayList ansprechen Java Basics - Anfänger-Themen 5
M Auf vorletztes Element des Stacks zugreifen? Java Basics - Anfänger-Themen 2
P guck ob Element in Array List enthalten ist Java Basics - Anfänger-Themen 2
M Zugriff auf Vector-Element Java Basics - Anfänger-Themen 5
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G Um ein Element aufsteigend sortieren Java Basics - Anfänger-Themen 3
G XML nächstes Child element (gleicher name) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben