Wie lösche ich ein Element in einer einer einfach verketteten Liste?


15.12.2020, 20:30

Man muss ja bei einer Liste einfach den Zeiger ändern und den Nachfolger löschen bin mir jedoch beim Algorithmus nicht sicher

Sören Stabenow  15.12.2020, 20:30

Es wäre von Vorteil auch die Programmiersprache zu erwähnen.

Aylin104 
Fragesteller
 15.12.2020, 20:32

Danke für den Tipp, werde darauf versuchen zu achten.
Mein Problem war leider beim Algorithmus daher habe ich es ausgelassen, tut mir leid

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Element suchen.

Vorgänger gemerkt haben.

Nachfolger merken.

Beim Vorgänger den Nachfolger als neuen Nachfolger eintragen.

Aylin104 
Fragesteller
 15.12.2020, 20:46

Leider habe ich Schwierigkeiten, dass in Form eines Algorithmuses zu schreiben in meinem Programm ...

Bspw. Ich möchte eine Schülerliste erstellen bzw. Ein Element darin löschen :

If (meineSchülerliste.tolast())
{system.out.println(meineSchülerliste.getContent();
}
if (this.isEmpty ()){
meineSchülerliste.hasAccess()==True; 
}
meineSchülerliste.Remote; 


0
Aylin104 
Fragesteller
 16.12.2020, 17:01

Die hier :)

0
DerEinsiedler  16.12.2020, 17:03
@Aylin104

Zu wenig info wie das genau bei dir aussieht.

Für die genaue Syntax müsste man die Definition der Schülerliste kennen.

1
Aylin104 
Fragesteller
 16.12.2020, 17:16
@DerEinsiedler

Das ist nur ein bsp. Benötigte nur den Algorithmus der immer geht unabhängig von der schülerliste

0
Aylin104 
Fragesteller
 16.12.2020, 17:21
@DerEinsiedler

Oh es tut mir leid, ich dachte Algorithmus wäre bereits in Programmierungssprache.

Entschuldigung und vielen Dank :)

0
  1. Iteriere über die Liste, wobei du dir im i-ten Schleifendurchlauf auch das (i-1)-te Element noch gemerkt haben musst (überlege dir, wie du verfahren musst, wenn das zu löschende Element das allererste ist) und stoppe sobald du das Element gefunden hast, das gelöscht werden soll.
  2. Gefunden: Bezeichnen wir mit e := L[i] das gefundene Element an Stelle i, das gelöscht werden soll und mit d := L[i-1] den gemerkten Vorgänger.
  3. Setze d.Nachfolger := e.Nachfolger.
  4. Fertig.

Das Aufwändigste ist tatsächlich, die beiden wichtigen Elemente zu finden. Dann ist es nur noch eine Setzung.

Woher ich das weiß:Berufserfahrung – Software-Entwicklung
Aylin104 
Fragesteller
 15.12.2020, 21:39

Diese Schreibweise kenne ich leider nicht nur solche :

If (meineSchülerliste.tolast())

{system.out.println(meineSchülerliste.getContent();

}

if (this.isEmpty ()){

meineSchülerliste.hasAccess()==True;

}

meineSchülerliste.Remote;

0
Willibergi  15.12.2020, 21:59
@Aylin104

Das ist auch keine Schreibweise, sondern eine Erklärung des Algorithmus. Ihn implementieren musst du schon selbst.

1
Aylin104 
Fragesteller
 15.12.2020, 22:03
@Willibergi

Mir würde eine richtige Erklärung des Algorithmus reichen, so würde ich das verstehen und nachvollziehen können.

vielen vielen Dank für deine Hilfe :)

0
Willibergi  15.12.2020, 22:15
@Aylin104

Was fehlt dir denn zu einer richtigen Erklärung? Was verstehst du nicht?

1
Aylin104 
Fragesteller
 16.12.2020, 07:26
@Willibergi

Ich weiß leider nicht wie ich das umsetzten soll, ich weiß zwar das Prinzip dahinter ich kann das aber nicht als Algorithmus im Java Programm eingeben

0
[ e(x-1) ] ----> [ e(x) ] -----> [ e(x+1) ]
[ e(x-1) ] --------------------> [ e(x+1) ]
               del([ e(x) ])

Oder auch:

last.next=this.next
del(this)

Eigentlich recht überschaubar.

Aylin104 
Fragesteller
 16.12.2020, 14:31

Diese Schreibweise kenne ich leider nicht nur solche : 

If (meineSchülerliste.tolast())

{system.out.println(meineSchülerliste.getContent();

}

if (this.isEmpty ()){

meineSchülerliste.hasAccess()==True; 

}

meineSchülerliste.Remove;

Ich weiß leider nicht wie ich das umsetzten soll, ich weiß zwar das Prinzip dahinter ich kann das aber nicht als Algorithmus im Java Programm eingeben

0