Rispondo a ciascuna delle tue domande:
1)
impostare la variabile pPrev a nil è una inizializzazione; tale variabile, ad ogni ciclo, contiene il puntatore all'elemento che precede quello che stiamo analizzando; se noi partiamo a scandire la lista dall'inzio, è ovvio che per il primo elemento, non avendo un precedente, avremo pPrev che vale nil, quindi non dovremo aggiornare alcun campo puntatore per il record dell'elemento precedente.
2)
pPrev è uguale a nil solo all'ingresso della funzione, ma quando noi passiamo al secondo elemento della lista, tale puntatore verrà inizializzato all'elemento precedente, cioè il primo, e così via. Questo ci consente, qualora troviamo l'elemento da eliminare, di usare il puntatore all'elemento precedente per aggiornare il campo che contiene l'indirizzo dell'elemento successivo facendolo puntare all'elemento che segue quello che stiamo per eliminare...insomma, teniamo legata assieme la lista escludendo il nodo da eliminare, che andiamo poi a deallocare con l'istruzione Dispose.
3)
ho impostato pAus a nil poichè il ciclo che scandisce la lista per controllare se esiste l'elemento cercato allo scopo di eliminarlo dura fino a quando il puntatore pAus è diverso da nil, cioè fino a quando abbiamo elementi da analizzare. Se noi vogliamo cancellare una sola ricorrenza dell'elemento cercato, basta che impostiamo pAus a nil dopo aver eliminato l'elemento e il ciclo si interrompe. Per continuarlo fino alla fine, eliminando tutte le ricorrenze, credo che basti continuare ad assegnare pAus all'elemento successivo a quello in esame.
Ciao!![]()