Ciao a tutti, mi hanno assegnato qualche esercizio sulle liste.
Il primo consite nel costruire una lista ed inserire vari valori.Poi l'utente inserisce un valore da ricercare nella lista ed eventualmente lo cancella.Ho qualche problema nella funzione eliminazione.Mi potreste aiutare
codice:
program lista2;
{$APPTYPE CONSOLE}
uses SysUtils;

type
  puntatore= ^elemento;
//Struttura degli elementi della lista
  elemento=record
     inf:integer;
     pun:puntatore;
   end;

(*La funzione crea_lista2 restituisce al programma principale il riferimento
  al primo elem. della lista, che è di tipo puntatore al record elemento*)
Function crea_lista2: puntatore;
var
  p,paus: puntatore;    (*p=punt. alla testa e paus=punt. ausiliario che*)
                          (*permette la creazione deglie elem. succ. della lista
                          senza perdere il punt. iniziale*)
  x: integer;      //Lo stesso tipo del campo inf (cioè integer)

begin
writeln;
write('Inserisci un''informazione(0 per finire): ');
readln(x);

if x=0 then p:=NIL      //se x=0 la lista è vuota(si chiude)
 else begin
//Creazione del primo elemento
new(p);            //Allocazione di spazio necessario a contenere un record di
                   //tipo elemento

p^.inf:=x;         (*Si copia il valore nella parte informazione di p*)
paus:=p;           //Sia p che paus puntano al primo elem. della lista

{Ora che abbiamo creato il rpimo elemento, si va avanti così finchè non viene
 inserito zero(questo è gestito dal ciclo while qui sotto}

while x<>0 do begin
writeln;
write('Inserisci un''informazione(0 per finire): ');
readln(x);

if x<>0 then begin
//Creazione dell'elemento successivo
new(paus^.pun);    (*Viene creato un nuovo elemento della lista, collegato al
                     precedente.Il puntatore all'elem. creato da new viene
                     assegnato al campo pun del record puntato da paus*)

paus:=paus^.pun;   //Viene aggiornato paus, in modo da puntare all'elem. succ.
paus^.inf:=x;      //La nuova informazione viene inserita nel campo corrispond.
end
else
  paus^.pun:=NIL;    //Marca di fine lista
  end;
 end;
crea_lista2:=p;    //Viene passato al chiamante il valore di p, punt.alla testa
end;

Function eliminazione(p:puntatore;var ele:integer):puntatore;
var
  paus:puntatore;     //puntatore ausiliario

begin
write('Inserisci l''elemento da eliminare: ');
readln(ele);
 begin
 paus:=p;
 while paus<>NIL do begin
   if paus^.inf<>ele then paus:=paus^.pun
   else dispose(paus);
                 end;
 end;
eliminazione:=p;
end;

(*Procedura ricorsiva per la visualizzazione della lista*)
Procedure vis2_lista(p:puntatore);
begin
 if p<>NIL then begin
 write(p^.inf);
 write('---> ');
 vis2_lista(p^.pun);
 end
else write('NIL');
end;



(*MAIN*)
var punt_lista: puntatore; //puntatore alla testa della lista
    valore:integer;

begin

 punt_lista:=crea_lista2;
 punt_lista:=eliminazione(punt_lista,valore);
 vis2_lista(punt_lista);

readln;
end.