Avevo già provato a spiegartelo head era NULL , quindi prima p=head equivaleva a p=NULL
Ora allocando memoria con malloc , head ora contiene un indirizzo alla memoria allocata , allora p=head , sia p che head contengono lo stesso indirizzo .

prima facevi p->next con p=NULL
ora fai p->next , dove next ESISTE