Estas muy confundido con punteros.
Tu problema esta en que la lista la pasas como una copia, la modificacion la haces en la copia.
Lo del Puntero lo hice porque al hacer el iterador este te devuelve un puntero al objeto. No tiene nada que ver con lo que vos trataste.
Una solucion seria pasar por refencia. esto evita que se haga la copia y tambien elimina el manejo de punteros. Para esto hay que modificar la definicion de cada funcion y agregar el simbolo & al argumento deseado:
Código C++:
Ver originalvoid cargar(list <Persona *> & lst) {
void listar(list <Persona *> & lst) {
Todo lo demas queda igual.
Saludos