En la visualización, según lo que has posteado,en la función mostrar_lista() tienes
Código C++:
Ver original//
aux = cap;
while (aux != NULL) {...
Dentro de ese bucle, vuelves a hacer exactamente lo mismo, con lo que la variable de control del bucle while externo vuelve a su valor inicial. Parece como si faltase un cierre de llave después del primer bucle while (con lo que alguna de las siguientes llaves de cierre sobrarían), o la variable de control de alguno de los bucles while (el interno o el externo) no fuese la que deba ser. De hecho, pienso que la variable de control del bucle while externo debiera ser aux2 y no aux, lo que achaco a un simple error mecanográfico.
En cuanto al otro problema, no sé como ha quedado el código después de los cambios que hiciste. Partiendo de lo que hay posteado, el fallo parece consecuencia de efectos colatrales por el empleo de varables globales.
Saludos,