24/09/2008, 08:23
|
| | Fecha de Ingreso: septiembre-2008 Ubicación: Córdoba
Mensajes: 67
Antigüedad: 16 años, 3 meses Puntos: 0 | |
Respuesta: Ayuda con listas enlazadas! Juarod, creo que el metodo public void sortedInsert(int i) es para insertar ordenadamente. Por ej. Tenés la lista con los nodos cuyos info son:
1 --> 3 --> 5 --> 6 --> null
Y te llega el nodo con info 2, pues deberias insertar el nodo para que la lista quede de esta forma.
1 --> 2 --> 3 --> 5 --> 6 --> null
Así pues, tenés 2 posibilibidades de como insertar esto
1) La lista esta vacia, por lo que el head deberia apuntar al nodo que te llega
2) La lista tiene elementos
2.1) La info del elemento a insertar es menor a la info de todos los elementos de la lista.
En este caso seria un addToHead
2.2) La info del elemento a insertar es mayor a la info de todos los elementos de la lista.
En este caso seria un addToTail
2.3) La info del elemento a insertar es menor a algunos elementos de la lista y mayor a algunos elementos de la lista. O sea insertar en el lugar que corresponda sin ser al frente, ni en la cola.
Ej. 1)
head --> null
Llega el nodo prt con info = 2, entonces quedaría
head --> 2
Ej. 2.1)
head --> 2
Llega el nodo prt con info = 1, entonces quedaría
head --> 1 --> 2
Ej. 2.2)
head --> 1 --> 2
Llega el nodo prt con info = 4, entonces quedaría
head --> 1 --> 2 --> 4
Ej. 2.3)
head --> 1 --> 2 --> 4
Llega el nodo prt con info = 3, entonces quedaría
head --> 1 --> 2 --> 3 --> 4
Código:
public void sortedInsert(int i){
SLLNode prt;
//int j=0;//No se como ordenar listas y lo hice como si fuera un vector
// for(i=0;i<size;i++){
// Primero debo chequear si la lista esta vacia
if(head== null) {
head=new SSLNode(i,null);
// si esta vacia, el head de mi lista apuntara al nuevo nodo creado con info i.
}
else {
// caso contrario itero la lista
// Con for seria asi
for(prt=head; prt.getNext()!=null; prt=prt.getNext()) {
// el inicio del for sera el head o sea el nodo a donde apunte el head, que seria el
// primer elemento de la lista; itera mientras el proximo nodo sea distinto de null;
// el incremento seria al proximo nodo al referenciado actualmente.
if(i>=prt.getInfo() && i<=prt.getNext().getInfo()) { // Si la info que recibo por
//parametro, es mayor o igual a la del actual nodo y menor o igual a la del
//proximo deberia insertarlo en este lugar. Ej. 2.3) Entonces
SLLNode temp= new SSLNode(i, prt.getNext());
//Creo el nodo temp con info i y con ref al proximo nodo de prt.
prt.setNext(temp);
//prt ahora apunta a temp
}//fin del if
// Si no cumple la condicion del if, es porque el i es menor al valor del info actual
// y por lo tanto tb del prox o porque es mayor que la info actual y tb del prox.
else if(i<=prt.getInfo()) { // si es menor, entonces deberia ir al frente siempre
SLLNode temp= new SSLNode(i, prt);
//Creo el nuevo nodo con info i, y referencia al nodo prt
head=temp;
//Ahora el head de mi lista apunta al nuevo nodo
}//fin del else if
// Si no cumple ningua de las cond anteriores, entonces es mayor a todos.
// El for recorre hasta el ultimo nodo, por lo que saldra solo y el nodo prt hara
// referencia al ultimo nodo
}//fin del for
// Ahora salio del for y se debe a dos posibilidades o ya se inserto el elemento o
// es mayor a todos como se dijo anteriormente, por lo tanto debo chequear lo
//ultimo
if(i>prt.getInfo()) { // Es mayor al ultimo, por lo tanto a todos los restantes
SLLNode temp= new SSLNode(i, null);
prt.setNext(temp);
//Creo el nuevo nodo con info i, y con ref al prox igual a null.
//El nodo prt, o sea el que estaba al ultimo referencia a ahora a al nuevo nodo
} // fin del if
} // fin del metodo
Espero te sirva, el codigo como siempre no esta chequeado, puede tener errores, lo importante es la logica, la cual puede variar tb, lo puedes hacer con dos for como venias haciendo o modificar algo de lo que hice.
Saludos... |