p=l ;
while(p->next!=NULL)
{

p=p->next ;

}

Tu assignes p au début de la liste et tu vas à la fin alors que p était déjà à la fin...