Hallo Olli,
deine Suchschleife für die doppelt verkettete Liste sieht noch etwas merkwürdig aus. Für eine solche Funktion überlegt man sich - wie stets - was geht rein, was soll raus kommen?
such ist konstant,
lauf ist variabel. Die Vorbedingung für
lauf ist "lauf = oben", das hast du schon mal richtig gemacht. Hast du dir eigentlich jemals Gedanken über die Nachbedingung gemacht?
Delphi-Quellcode:
procedure TSkispringen.bt_springer_loeschenClick(Sender: TObject);
var
lauf: TZeiger;
such: String;
BEGIN
such := InputBox('Eingabe', 'Name', '');
// precondition: lauf = oben
lauf := oben;
WHILE (lauf <> nil) AND (such <> lauf^.name) DO
lauf := lauf^.nachher;
// postcondition:
// lauf = nil g.d.w. nicht gefunden
// lauf <> nil g.d.w. lauf^.name = such
// Und auch der eigentliche Aktionsteil
// sieht aufgeräumt aus, wenn du weißt, was du tust
IF NichtGefunden THEN
ShowMessage('hä?')
ELSE
BEGIN
IF EsGibtEinenNachfolger THEN
lauf^.nachher^.vorher := lauf^.vorher;
IF EsGibtEinenVorggänger
THEN lauf^.vorher^.nachher := lauf^.nachher
ELSE EsGibtEinenNeuenErsten;
// Kannst Speicher ruhig wieder freigeben
// Brauchst ihn ja doch nicht mehr
Dispose(lauf);
Ausgabe();
END;
END;
Grüße vom marabu