PROCEDURE einfuege(a: atom; VAR l: liste);
VAR p: liste;
BEGIN NEW(p);
IF l = NIL THEN l := p ELSE p^ := l^
END;
l^.nach := p; l^.wert := a;
END einfuege;
Beim Entfernen geht alles sinngemäß rückwärts:
PROCEDURE entferne(VAR a: atom; VAR l: liste);
VAR p: liste;
BEGIN a := l^.wert; p := l^.nach;
IF l = p THEN l := NIL ELSE l^ := p^
END;
DISPOSE(p);
END entferne;
Als Ausgleich für diese Komplikationen kommt jetzt
eine neue Möglichkeit hinzu:
die Datenelemente sind jetzt ein logischer Ring,
und indem wir den Anker weiter wandern lassen, können wir
ihn bei einem beliebigen Element beginnen lassen.
Zum Löschen einer Ringliste hängen wir am einfachsten alle Elemente aus.
PROCEDURE delete(l: liste);
VAR p: liste;
BEGIN WHILE l <> NIL
DO p := l^.nach;
IF l = p THEN l := NIL ELSE l^.nach := p^.nach
END;
DISPOSE(p);
END;
END delete;