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!!!





