Program P123;
 { Crearea listei unidirecţionale A->B->C->D }
type AdresaCelula=^Celula;
     Celula=record
                  Info : string;
                   Urm : AdresaCelula;
            end;
var P,         { adresa de bază }
    R, V : AdresaCelula;
begin

 { 1 - iniţial lista este vidă }
 P:=nil;

 { 2 - adăugarea celulei A }
 new(R);       { crearea unei celule }
 P:=R;         { iniţalizarea adresei de bază }
 R^.Info:='Nastea'; { încărcarea informaţiei utile }
 R^.Urm:=nil;  { înscrierea indicatorului "sfîrşit de listă" }
 V:=R;         { memorarea adresei vîrfului }

 { 3 - adăugarea celulei B }
 new(R);       { crearea unei celule }
 R^.Info:='Ana'; { încărcarea informaţiei utile }
 R^.Urm:=nil;  { înscrierea indicatorului "sfîrşit de listă" }
 V^.Urm:=R;    { crearea legăturii A -> B }
 V:=R;         { actualizarea adresei vîrfului }

 { 4 - adăugarea celulei C }
 new(R);       { crearea unei celule }
 R^.Info:='Vera'; { încărcarea informaţiei utile }
 R^.Urm:=nil;  { înscrierea indicatorului "sfîrşit de listă" }
 V^.Urm:=R;    { crearea legňturii B -> C }
 V:=R;         { actualizarea adresei vîrfului }

 { 5 - adăugarea celulei D }
 new(R);       { crearea unei celule }
 R^.Info:='Ludmila'; { încărcarea informaţiei utile }
 R^.Urm:=nil;  { înscrierea indicatorului "sfîrşit de listă" }
 V^.Urm:=R;    { crearea legăturii C -> D }
 V:=R;         { actualizarea adresei vîrfului }

 { afişarea listei create }
 v:=P;
 while v<>nil do begin
                   writeln(v^.Info);
                   v:=v^.Urm
                 end;
 readln;
end.
