problema insertar nodos en listas ordenadas enlazadas

lauraRom16
11 de Diciembre del 2005
Hola a todos,
Tengo problemas con una practica sobre listas enlazas, a la hora de insertar nuevos nodos. Tengo una ListaMulticlaveNodos, que tiene de atributos una _cabeza de tipo NodoListaMC, y un int, que te dice las formas de ordenacion distintas con las que quieres ordenar una serie de NodoListaMC. Esos NodosListaMC tienen un _elemento tipo E (tengo que usar tipos genéricos), una _clave, que es una lista de nodos, con las numeros que dan la informacion sobre la posicion del nodo, en cada tipo de ordenacion, y un _siguiente, que contiene una lista de los elementos siguientes al actual, segun cada tipo de ordenacion tambien. Como veo que en este foro no se pueden colgar archivos, pongo el metodo que me he hecho de insertar, por si a primera vista, alguien puede localizar los fallos que tengo.

public boolean insertarElemento(E elemento, Comparable[] clave){
boolean insertado = false;
NodoListaMC<E> nuevo = new NodoListaMC<E> ();
nuevo.asignarElemento(elemento);
if (estaVacia()){
System.out.println("si esta vacia, inserto el primer elemento");
for (int i = 0; i < _numClaves; i++){
nuevo.asignarClave(clave[i], i);
_cabeza.insertarElemento(nuevo, i);
}
insertado = true;
}else{
System.out.println("inserto mas elementos cuando la lista ya tiene alguno");
NodoListaMC<E> ant = null;
NodoListaMC<E> sig = null;

for (int i = 0; i < _numClaves; i++){
ant = this.primero(i);

int num = 0;
num = nuevo.toString().compareTo(ant.toString());

if(sig != null && num < 0){
sig = ant.conseguirSiguiente(i);
nuevo.asignarSiguiente(ant,i);
_cabeza.insertarElemento(nuevo, i);
insertado = true;
//se busca en el resto de la lista
}else if (sig != null && num > 0){
sig = ant.conseguirSiguiente(i);
while(sig != null && num > 0){
ant = sig;
sig = ant.conseguirSiguiente(i);
}
if (sig == null){
ant.asignarSiguiente(nuevo,i);
_cabeza.insertarElemento(nuevo, i);
}else{
nuevo.asignarSiguiente(sig,i);
ant.asignarSiguiente(nuevo,i);
}
insertado = true;
}else if (sig == null && num < 0){
ant.asignarSiguiente(nuevo, i);
_cabeza.insertarElemento(nuevo, i);
insertado = true;
}else if(sig == null && num > 0){
nuevo.asignarSiguiente(ant,i);
insertado = true;
}else if (num == 0){
System.out.println("El elemento que se buscaba ya esta en la lista");
}
}
}
return insertado;

}

Los parámetros son un elemento, y un array de claves, que contienen las claves que dicen la posicion del nodo, con ese elemento y esas claves, dentro de un tipo de ordenacion. Es decir, para el tipo de ordenacion "0" tenemos clave[0] que si contiene un 1, es que el nodo que tenemos que insertar, tiene que ser el primero, segun el tipo de ordenacion "0". Y si para ese tipo de ordenacion ya habia algun elemento, que tiene que ir despues del que hay que insertar, el atributo _siguente, del nodo que se inserta, tiene que estar apuntando al siguiente nodo de la lista. El problema creo que esta, al insertar un segundo elemento a la lista, porque al intentar insertar otro elemento, lo toma como si sólo hubiera uno, y el _siguiente del primer elemento de la lista, estuviera apuntando a null. Pero no se como arreglarlo.

Se que es un poco lioso, pero he tratado de explicarlo lo mejor posible. Agradezco de antemano, toda la ayuda que me podáis dar. Si alguien quiere, le puedo mandar mas trozos de código por mail. Muchas gracias.