mmm non proprio.. come dici tu nell'esempio di prima..

if ((head1->esp>head2->esp) || (head2==NULL))

se head2==null non dovrebbe esplodere (error) visto che head2->esp non esiste?

invece funziona come se la condizione head2==NULL annullasse la prima