Non è che "deve essere NULL", dipende da come fai la lista.
Nelle liste con sentinella per capire quando finire di leggere gli elementi, non si controlla che il puntatore sia NULL.Ma si controlla che non si abbia raggiunto la sentinella.
La sentinella è un elemento simbolico, che dice quando la lista inizia e finisce (è circolare per cui non si rischia di andare in segmentation fault).
Esempio:
Ovviamente qua la lista è vuota per cui non si entra nemmeno una volta nel corpo del while.codice:elemento *sentinella=(struct elemento*)malloc(sizeof(struct elemento)); sentinella->next=sentinella; sentinella->prev=sentinella; elemento *ptr=sentinella; while(ptr!=sentinella) ptr=ptr->next;
Per aggiungere elemento allochi una nuova cella.Gli elementi vanno collegati.
Per capire come funziona bisogna conoscere i puntatori, se questo esempio non ti è chiaro ti consiglio di ripassarti i puntatori.