PROGRAM listen; TYPE Liste = ^Element; Element = RECORD wert : INTEGER; next : Liste; END; VAR l : Liste; PROCEDURE vorn_anfuegen(x:INTEGER; VAR l:Liste); VAR neu:Liste; BEGIN New(neu); neu^.wert := x; neu^.next := l; l := neu; END; PROCEDURE loeschen(x:INTEGER; VAR l:Liste); VAR pred,opfer:Liste; BEGIN IF l <> NIL THEN BEGIN opfer := l; IF l^.wert = x THEN BEGIN l := l^.next; Dispose(opfer); END ELSE BEGIN WHILE (opfer <> NIL) AND (opfer^.wert <> x) DO BEGIN pred := opfer; opfer := opfer^.next; END; IF opfer <> NIL THEN BEGIN pred^.next := opfer^.next; Dispose(opfer); END; END; END; END; PROCEDURE rekursiv_loeschen(x:INTEGER; VAR l:Liste); VAR opfer:Liste; BEGIN IF l <> NIL THEN IF l^.wert = x THEN BEGIN opfer := l; l := l^.next; Dispose(opfer); END ELSE rekursiv_loeschen(x,l^.next); END; BEGIN l := NIL; (* Initialisierung! *) vorn_anfuegen(5,l); loeschen(5,l); END.