Використання вільної пам'яті
while ( p^.next <> nil ) and not stop do
if p^.next^.v = s then stop := true
else p := p^.next;
{ p^.next = nil – елемента із заданим значенням немає або }
{ stop = true – треба вилучити елемент p^.next^ }
if stop then
begin
pp := p^.next; p^.next := pp^.next;
dispose ( pp ); pp := nil
end
end
end;
4. Списки як рекурсивні об'єкти
Нехай a позначає довільний елемент множини A. Списки її елементів можна означити рекурсивно, а саме:
порожній список <> є списком;
якщо
За цим означенням список складається з головного елемента й підсписку, який сам є списком. Відтворимо рекурсивну природу списків означенням типу зв'язаних списків елементів типу T :
type Plist = ^List;
List = record
v : T; subl : Plist
end
Список ідентифікується вказівником на його головний елемент. Але й кожний наступний елемент, ідентифікований полем subl попереднього, вважається головним елементом підсписку. Порожній список указується значенням nil. Виразимо рекурсивно обробку списку за допомогою обробки головного елемента й підсписку, вважаючи для визначеності, що T = integer.
Перевірку належності елемента списку задає рекурсивна функція
function isinr ( a : integer; lp : Plist ) : boolean;