El primer while sirve para eliminar el primer elemento de la lista (para esto hay que modificar directamente l) si vale x, y si el siguiente tambien vale x, entonces se vuelve a borrar, por eso se chequea que exista un siguiente antes de verificar si el elemento vale x.
La instruccion para ir al siguiente valor seria p=l->sig, y se va a repetir siempre y cuando el primer elemento de la lista sea x. En caso de que todos los elementos fueran x, al final quedaria p = l->sig (null) y l=p (null). Deberia terminar sin problemas.
Acabo de verificar lo segundo y si, era eso! Muchisimas gracias, y si lo que dije antes hay algo mal te agradeceria que me lo comentaras tambien.
La instruccion para ir al siguiente valor seria p=l->sig, y se va a repetir siempre y cuando el primer elemento de la lista sea x. En caso de que todos los elementos fueran x, al final quedaria p = l->sig (null) y l=p (null). Deberia terminar sin problemas.
Acabo de verificar lo segundo y si, era eso! Muchisimas gracias, y si lo que dije antes hay algo mal te agradeceria que me lo comentaras tambien.