Beim Entfernen geht alles sinngemäß rückwärts: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;
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.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;
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;