Ennél a módszernél mutatóra mutató mutatót használunk, ami a listaelem mutató részére mutat. Így az elem helyének megkeresésénél nem kell még egy segédmutatót és elágazást használni. Így hatékonyabb programot kapunk.
VISSZA
with ada.text_io; use ada.text_io;
procedure main is
--egy eljaras ami beolvas egy szamot
procedure BE(msg : in string; data : out integer) is
h : integer;
s : string(1..12);
begin
put_line(msg);
get_line(s,h);
data := integer'value(s(1..h));
end BE;
type Listaelem;
type PList is access Listaelem;
type Listaelem is record
e : integer;
next : aliased PList;
end record;
--Mutatora mutato tipus
type PPList is access all PList;
L : aliased PList := NULL;
p : aliased PList;
pp : PPList;
i : integer;
begin
BE("Kerek egy szamot",i);
while i > 0 loop
p := new Listaelem;
p.e := i;
pp := L'access;
while pp.all /= null and then pp.all.all.e < i loop
pp := pp.all.all.next'access; --itt es az elozo sorban a masodik all elhagyhato, mert a pp.all egy rekordra mutat
end loop;
p.next := pp.all;
pp.all := p;
BE("Kerek egy szamot",i);
end loop;
--kiirjuk az eredmenyeket
p := L;
while p /= null loop
put(integer'image(p.e) & "; ");
p := p.next;
end loop;
end main;
VISSZA