program ListeCollegate;
type
TipoElemLista = integer;
TipoLista = ^TipoRecordLista;
TipoRecordLista = record
info : TipoElemLista;
next : TipoLista
end;
procedure StampaLista (lis: TipoLista);
begin
while lis <> NIL do
begin
writeln(lis^.info);
lis := lis^.next
end
end;
procedure StampaListaRicorsiva (lis: TipoLista);
begin
if lis <> NIL then
begin
writeln(lis^.info);
StampaListaRicorsiva(lis^.next)
end
end;
procedure StampaListaInvertita (lis: TipoLista);
begin
if lis <> NIL then
begin
StampaListaRicorsiva(lis^.next);
writeln(lis^.info)
end
end;
var
lista : TipoLista;
begin
new(lista);
write('Inserisci un intero: ');
readln(lista^.info);
new(lista^.next);
write('Inserisci un intero: ');
readln(lista^.next^.info);
lista^.next^.next := NIL;
writeln('Ecco i numeri che hai scritto');
StampaLista(lista);
writeln('Ecco i numeri che hai scritto (stampa ricorsiva)');
StampaListaRicorsiva(lista);
writeln('Ecco i numeri che hai scritto (in ordine inverso)');
StampaListaInvertita(lista);
end.