program Wskazniki___Listy;
uses crt;
type wsk=^lis;
     lis=record
           licz:integer;
           nast:wsk;
         end;
var g:wsk;
    n:byte;

procedure tworz(var g:wsk);
var pom:wsk;
    n:integer;
begin
  n:=0;
  repeat
  new(pom);
  pom^.licz:=random(1000);
  n:=n+1;
  pom^.nast:=g;   
  g:=pom;         
until n=50;
end;

procedure wypisz(g:wsk);
var pom:wsk;
begin
pom:=g;
while pom<>nil do
   begin
    write(pom^.licz,'  ');
    pom:=pom^.nast;
   end;
end;

procedure sort(g:wsk);
var pom,pom1:wsk;
    buf:integer;
    p:boolean;
begin
repeat
pom:=g;
pom1:=g;
p:=true;
while pom1^.nast<>nil do
   begin
    pom1:=pom1^.nast;
    if pom^.licz>pom1^.licz then
      begin
       buf:=pom^.licz;
       pom^.licz:=pom1^.licz;
       pom1^.licz:=buf;
       p:=false;
      end;
    pom:=pom^.nast;
   end;
until p=true;
end;

procedure zwolnij(var g:wsk);
var pom:wsk;
begin
 while g<>nil do
  begin
   pom:=g^.nast;
   dispose(g);
   g:=pom;
  end;
end;

BEGIN
randomize;
clrscr;
g:=nil;
writeln('Oto 50 liczb umieszczonych w pamieci dynamicznej:');
writeln;
tworz(g);
wypisz(g);
writeln;
writeln('Wcisnij dowolny klawisz aby je posortowac.');
readkey;
sort(g);
writeln;
writeln('Oto 50 liczb posortowanych rosnaco:');
writeln;
wypisz(g);
writeln;
writeln('Wcisnij dowolny klawisz aby zwolnic pamiec.');
readkey;
zwolnij(g);
writeln('Pamiec zostala zwolniona.');
readkey;
END.