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;
}