Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/09/2008, 10:16
una_xikilla
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Invertir lista circular

Hola de nuevo.

Voy a intentar explicarme mejor:

Tengo una lista enlazada con claves (1->2->3->4->...->NULL)

Cada clave tiene valores pero se apunta al último valor y éste al primero... y finalmente vuelve al último (lista circular).

Ej:
clave: 3
valor: 3.010000
valor: 3.020000
valor: 3.030000
valor: 3.000100
valor: 3.000200
valor: 3.000300

En este caso la clave 3 apunta al valor 3.000300->3.010000->3.020000->...->3.000300

Lo que busco es ordenarlo de menor a mayor, es decir:
clave: 3
valor: 3.000100
valor: 3.000200
valor: 3.000300
valor: 3.010000
valor: 3.020000
valor: 3.030000
Quedando que la clave 3 apunte al valor 3.030000->3.000100->3.000200->...->3.030000

He hecho esto pero está mal:
Código:
void ordenaValores(Tabla *tabla, funcionCompara fvalores){
	NodoClave *claveAux;
	NodoValor *valorAux, *valorAuxSig;
	int fin;
	

	for(claveAux = tabla->primero ; claveAux->siguiente != NULL ; claveAux = claveAux->siguiente){
		do {
			fin=0;
			valorAux=claveAux->ultimo;
			valorAuxSig=valorAux->siguiente;
			for (valorAux; valorAux!=valorAuxSig; valorAux=valorAux->sig) {
				if (fvalores (valorAux->valor, valorAuxSig->valor)<0) {
					fin=valorAux->valor; // Uso fin como variable temporal
					valorAux->valor=valorAuxSig->valor;
					valorAuxSig->valor=fin;
					fin=1;
				}
			}
		} while(fin==1);
	
	}
}
Ayuda por favor!!!!
Me estoy volviendo loca!!!