1. Realizzare una copia di una lista con puntatore di testa e di coda

Realizzare una copia significa costruire una lista a puntatori che contenga alla fine le stesse informazioni dell'originale (dovendo essere i nodi creati ex-novo...).Bisogna effettuare una visita completa della prima lista e per ogni informazione contenuta in essa realizzare una "aggiungi in coda" alla seconda lista; in coda perché bisogna conservare anche l'ordine di "apparizione".

Se la prima lista è vuota anche la seconda dovrà esserlo. Se la prima lista contiene le informazioni "a", "b" e "c" in questo ordine allora la seconda dovrà contenere "a", "b" e "c" nello stesso ordine. (diagramma...)

Procedure COPIATC(Lin: ListaTC; Var Lout: ListaTC);

Si tratta di procedure perché non è richiesta una "risposta". Lin è la lista dalla quale copiare (in ingresso), Lout è la lista da produrre (in uscita). Si richiede che Lout sia una lista vuota altrimenti si otterrà un'operazione di "appendi" piuttosto che di copia; oppure bisognerà aggiungere un'istruzione iniziale di "crealista" oppure "distruggilista" per Lout.

Procedure COPIATC(Lin: ListaTC; Var Lout: ListaTC);
Var
 P: pNodoTC;
Begin
 P:=L.Testa;
 while(P <> Nil) do
 begin
 AggInCoda(Lout, P^.Info);
 P:=P^.Succ;
 end;
End;

Procedure AggInCoda(Var L: ListaTC; I: tInfo);
Var
 P: pNodoTC;
Begin
 New(P);
 P^.Info:=I;
 P^.Succ:=Nil;
 If(L.Testa = Nil) Then
 L.Testa:=P
 Else
 L.Coda^.Succ:=P;
 L.Coda:=P;
End;

2. Confrontare due liste bidirezionali per determinare se una è l'inversa dell'altra

Bisogna confrontare le informazioni contenute nei nodi delle due liste; la prima con l'ultima, la seconda con la penultima, ... cioè bisogna visitare contemporaneamente le due liste partendo da estremi opposti.

Se le due liste sono vuote il confronto ha successo; se non sono vuote allora se la prima contiene "a", "b" e "c", la seconda contiene "c", "b" e "a". (diagramma)

Function INVERSEBI(L1, L2: ListaBi): Boolean;

Si tratta di function perché è richiesta una "risposta" (vero/falso). Due liste bidirezionali in ingresso; nessun prerequisito.

Function INVERSEBI(L1, L2: ListaBi): Boolean;
Var
 P, Q: pNodoBi;
Begin
 P:=L1.Testa;
   Q:=L2.Coda;
 while(P <> Nil) and (Q <> Nil) and (P^.Info = Q^.Info) do
 begin
 P:=P^.Succ;
         Q:=Q^.Prec;
 end;
   INVERSEBI:=(P = Nil) and (Q = Nil);
End;

- ApPuNtIdIuNiNfOrMaTiCo