Використання вільної пам'яті
begin
if lp = nil then isinr := false else
{ обробка голови }
if a = lp^.v then isinr := true else
{ рекурсивно перевірити належність елемента підсписку }
isinr := isinr ( a, lp^.subl )
end
Далі ми запишемо рекурсивну функцію addordr додавання елемента в упорядкований список зі збереженням його упорядкованості та повернення вказівника на список, у який вставлено елемент. Але спочатку напишемо функцію newelemr, подібну процедурі newelem з підр.16.3. На відміну від тієї процедури, вказівник на новий елемент повертається з неї.
function newelemr(p : Plist; z : integer) : Plist;
var pp : Plist;
begin
new(pp); pp^.subl:=p; pp^.v:=z;
newelemr:=pp
end;
Наведена функція використовується в функції addordr:
function addordr ( a : integer; lp : Plist ) : Plist;
var p : Plist;
begin
if (lp = nil) or (a < lp^.v) then
{список, ідентифікований lp, стає підсписком }
{ за новим головним елементом }
addordr := newelemr ( lp, a );
else
begin { рекурсивно додати елемент до підсписку }