Se formatti le due versioni usando gli stessi nomi ti accorgi che cambia praticamente nulla.
void DeleteList1(_Node *p)
{
_Node *tmp;
while ( p )
{
tmp = p->next;
delete p;
p = tmp;
}
}
void DeleteList2(_Node *p)
{
_Node *tmp;
while ( p )
{
tmp = p;
p = p->next;
delete tmp;
}
}
Nella prima forma memorizzi l'indirizzo del nodo successivo, elimini il nodo corrente e poi
aggiorni il puntatore al nodo corrente con l'indirizzo del nodo successivo. Nella seconda forma
memorizzi l'indirizzo del nodo corrente, aggiorni il puntatore al nodo corrente con
l'indirizzo del nodo successivo e dunque elimini il nodo corrente.
Forse la seconda è più elegante?
Poi, come scrive Nippolo, la cosa importante è che dopo aver eliminato tutti i nodi della lista, il puntatore globale alla testa della lista riceva il valore zero.