Rieccomi...

Ho il seguente problema: devo eliminare di volta in volta un elemento della lista inserito in precendenza, liberando la memeria con una free..

Ho sviluppato il seguente codice:

codice:
void pop(M_player *ptop, F_player *B){
    dbPRINT(ptop,B);

    M_player *ptmp=ptop,*A=ptop,*ptFREE=ptop;

    int tmp;
    scanf("%d",&tmp);

    while (ptFREE->id!=tmp){
      ptmp=ptFREE;
      ptFREE=ptmp->next;
    }
    ptmp->next=ptFREE->next;
    free (ptFREE);

dbPRINT(A,B);
}
Brevemente...le dbprint sono due funzioni che printano il contenuto della lista prima e dopo.
Il codice implementato funziona, in quanto effettivamente elimina correttamente gli elementi che acquisisco da tastiera con la scanf.

IL BUG si verifica quando si chiede di eliminare il primo elemento della lista...NON LO ELIMINA.

IDEE??? please?