Java - Ayuda con esta Impementación de listas ligadas

   
Vista:

Ayuda con esta Impementación de listas ligadas

Publicado por Alejandro Ruiz (1 intervención) el 23/10/2011 23:05:13
Hola amigos de la web del programador, tengo una problema con esta implementación que hize de listas ligadas, voy a incluir estos tres codigos que es mi clase CELDA(NODO)- LISTA - PRUEBA LISTA, relize todo, pero a la hora de hacer mi prueba, no me deja hacer ciertas operaciones, como es e caso de insertar, eliminar etc, inclui un metodo llamado pos el cual regresa la direccion anterior al numero de dato p, creo que aqui es donde se alla el error, agradeceria mucho su ayuda, espero me puedan ayudar, les dejo a continuación los codigos:

//CLASE CELDA(NODO)

public class Celda {

public Object dato;
public Celda sig;

public Celda(Object n){

dato=n;
sig=null;

}
}
***********************************************************************************************************
//CLASE LISTA

public class Lista {
private Celda inicio; // Primer nodo de la lista
private Celda actual;


public Lista(){
inicio=null;
actual = esVacia() ? inicio: inicio.sig;
}


public boolean esVacia(){
Celda t=inicio;
if(t==null)
return true;
return false;
}

public Celda pos(int p){
//regresa la direccion anterior al numero de dato p

Celda t= inicio;

for(int i=1; t.sig != null && i<p; i++){

t=t.sig;

if(i==p)
return t;
}
return null;
}

public boolean insertar (Object d, int p){

Celda t= new Celda(d); //(1)
Celda ps= pos(p);

if(ps !=null){
t.sig=ps.sig; //(2)
ps.sig=t; //(3)
return true;

}
return false;
}

public boolean eliminar (int p){

Celda ps= pos(p);
if(ps !=null && !esVacia() ){
ps.sig =ps.sig.sig;
return true;
}
return false;
}

public void vaciarLista(){
inicio.sig=null;
}


public void listar(){ //imprime los elementos de la lista
Celda actual=inicio;
if(!esVacia()){ //verifica que existan elementos

while (actual != null){
System.out.println(" "+actual.dato+" "); //itera atravez de toda la lista
actual=actual.sig;
}

}
else
System.out.println("La lista esta vacia ");

}
public Object verFrente() throws Exception{
if(!esVacia())
return inicio.dato;
else
throw new Exception("no hay elementos que mostar");
}

public boolean estaDentro(){

return actual != null && actual !=inicio;
}
public Object verDato(){
return estaDentro() ? actual.dato : null;
}

}

********************************************************************************************************

//CLASE PRUEBA_LISTA

public class PruebLista {

public static void main(String ars[]) throws Exception{
Scanner leer= new Scanner(System.in);
LinkedList ls=new LinkedList();


Lista lista=new Lista();
int opcion, pos;
String dato="";


do{

System.out.println("¬¬ LISTA LIGADA ¬¬");
System.out.println ("¿Que operación deseas realizar? \n 1.- Insertar \n 2.- Ver Inicio de la Lista \n 3.- Ver dato en la posicion \n 4.- Listar \n 5.- Eliminar \n 6.- Vaciar Lista \n 7.- Terminar");
opcion=leer.nextInt();

switch(opcion){

case 1:
leer.nextLine();
System.out.println(" \nProporciona El Dato Para Agregarlo en la lista : ");
dato=leer.nextLine();
System.out.println(" Proporciona la posicion donde insertaras el elemento ");
pos=leer.nextInt();

lista.insertar(dato, pos);

break;

case 2:
leer.nextLine();
System.out.println(" \nEl Inicio De La Lista Es " +lista.verFrente() );
break;
case 3:
leer.nextLine();
System.out.println(" \nEl dato en la posicon es " + lista.verDato() );
break;
case 4:
leer.nextLine();
lista.listar();

break;
case 5:
System.out.println("Ingresa la posicion del elemento que vas a elimnar ");
pos=leer.nextInt();
System.out.println("Se Borro "+ lista.eliminar(pos));
break;
case 6:
System.out.println("Esta a punto de vaciar la lista ");
lista.vaciarLista();
System.out.println("Lista Vacia! ");
break;

}

}while(opcion !=7);
}
}
******************************************************************************************************
Si ejecuto mi prueba, me genera esta accion al insertar, y es lo mismo a la hora de realizar otras operaciones

//EJECUCIÓN

¬¬ LISTA LIGADA ¬¬
¿Que operación deseas realizar?
1.- Insertar
2.- Ver Inicio de la Lista
3.- Ver dato en la posicion
4.- Listar
5.- Eliminar
6.- Vaciar Lista
7.- Terminar
1

Proporciona El Dato Para Agregarlo en la lista :
12
Proporciona la posicion donde insertaras el elemento
1
Exception in thread "main" java.lang.NullPointerException
at AppListas.Lista.pos(Lista.java:34)
at AppListas.Lista.insertar(Lista.java:47)
at AppListas.PruebLista.main(PruebLista.java:40)
Java Result: 1
***********************************************************************************************************

Espero su ayuda, muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder