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