Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/12/2014, 17:21
freakfreckles
 
Fecha de Ingreso: diciembre-2014
Mensajes: 1
Antigüedad: 10 años, 3 meses
Puntos: 0
Intercambio de Nodos

Buenas! A ver si me pueden ayudar, tengo una galería de imagenes construida por nodos, y tengo que poder votar una imagen y ordenarla.
Ya cuento con la galeria ordenada hasta que agrego una nueva imagen, y mi misión es votarla y ordenarla en el resto de la lista. Lo que me está complicando es el intercambio del nodo desordenado con el nuevo lugar. Ya que no puedo usar swap simplemente. Debería arreglar los punteros de los nodos manualmente. No se si se entiende, les paso mi estructura y luego mi función votar.
El error que me sale es "segmentation fault", agradecería su ayuda.

Saludos


struct Nodo {
Imagen elemento;
Nodo* sigLlegada;
Nodo* sigVotos;
int votos;
};

class Lista {
public:
Nodo* prmLlegada;
Nodo* prmVotos;
};
void GaleriaImagenes::agregarImagen(const Imagen &imagen) {

Nodo* nuevo = new Nodo;
nuevo -> elemento = imagen;
nuevo -> sigLlegada = NULL;
nuevo -> sigVotos = NULL;
nuevo -> votos = 0;

if(imagenes.prmLlegada == NULL){
imagenes.prmLlegada = nuevo;
}
else{
Nodo* i = imagenes.prmLlegada;
Nodo* j = imagenes.prmVotos;

while( i -> sigLlegada != NULL){
i = i -> sigLlegada;
}
i -> sigLlegada = nuevo;
while( j -> sigVotos != NULL){
j = j -> sigVotos;
}
j -> sigVotos = nuevo;
}
}

void GaleriaImagenes::votar(const Imagen &imagen) {
Nodo* i = imagenes.prmVotos;
while (!(i -> elemento == imagen)){
i = i -> sigVotos;
}
i -> votos = i -> votos + 1;
Nodo* k = i -> sigVotos;
while(k -> votos == i -> votos - 1){
k = k -> sigVotos;
}
i->sigVotos = k->sigVotos;
k->sigVotos = i;

}