Juszr, "recorrer" es el típico puntero auxiliar a un nodo de la lista para recorrerla.
Karmi, tu código queda un tanto confuso de leer, y no estoy del todo seguro que realice su función. El código podría simplificarse, debido a que con tantas condiciones anidadas, algunas de ellas refiriéndose a lo mismo, es difícil hacer una traza.
Por otro lado, en caso de que tu lista esté vacía, z se devuelve sin inicializar --> mal asunto.
Te propongo el siguiente código:
int negativos(){
int z=0;
Nodo *recorrer;
recorrer = inicio;
if(recorrer==NULL)
return -1 //si la lista esta vacia, devolvemos -1, por ejemplo. Esta linea y la superior se pueden omitir.
while (recorrer){ //esto es lo mismo que recorrer!= NULL
if(recorrer->dato < 0)
z++;
recorrer=recorrer->sig;
}
return z;
}