RE:Borrar un nodo especifico de una lista
Justo esta es una de mis clases que hice publicas cuando andaba en la escula, espero te sirva, lo que resuelve tu problema es el metodo borra, lo que tienes que hacer es enviarle la lista que quieres que trabaje, como podras ver esto te puede servir para una o 1000 listas
exito en tu codigo, espero esto te funcione o la menos te ayude!
public class lista{
/*
* Este metodo cuenta los nodos que estan en memoria
* "a" es la lista que se pasa por argumento para contar los nodos
*/
static int cuentame(listaLSE a){
try{
if(a.siguiente == null) return 0;
}catch(NullPointerException e){
return 0;
}
int i = 0;
listaLSE aux = a;
while(aux.siguiente != null){
aux = aux.siguiente;
i++;
}
aux = null;
return i;
}
/*
* Pieza clave de agregar, con este se puede agregar en cualquier posicion.
* "a" es la lista que se pasa por argumento para introducir el "dato" en una posicion "pos"
*/
static void agregar(listaLSE a, int pos, int dato){
int i = cuentame(a);
listaLSE aux = new listaLSE();
aux = null;
if(i < 0 || pos > i){
System.out.println("El índice de la lista esta fuera de los limites de tal");
a = new listaLSE(dato);
}else{
for(int contador = 1; contador <= pos; contador++) a = a.siguiente;
aux = a.siguiente;
a.siguiente = new listaLSE(dato);
a.siguiente.siguiente = aux;
}
}
/*
* Agrega al principo del apuntador
* "a" es la lista que se pasa por argumento para introducir el "dato" en una posicion "0"
* La clave de este metodo es el metodo agregar, entonces nadamas se llama para que
* introduzca en la posicion 0
*/
static void agregaInicio(listaLSE a, int dato){
agregar(a, 0, dato);
}
/*
* Agrega al final del apuntador
* "a" es la lista que se pasa por argumento para introducir el "dato" en una posicion "i"
* La clave de este metodo es el metodo agregar, entonces nadamas se llama para que introduzca
* un nodo en la posicion i que es el limite
*/
static void agregarFinal(listaLSE a, int dato){
int i = cuentame(a);
agregar(a, i, dato);
}
/*
* Al igual que agregar este metodo se utiliza para borrar un nodo en cualquier posicion
* "a" es la lista que se pasa por argumento para borrar un nodo en la posicion "pos"
*/
static void borra(listaLSE a, int pos){
if(a == null) System.out.println("La lista no ha sido creada");
if(a.siguiente == null) System.out.println("la lista esta vacia");
else{
int i = cuentame(a);
int cont = 0;
if(pos <= i){
while(cont < (pos - 1)){
a = a.siguiente;
cont++;
}
a.siguiente = a.siguiente.siguiente;
}else{
System.out.println("No se puede borrar en la posición '" + pos + "' el limite es: " + i);
}
}
}
/*
* Borrar al principo del apuntador
* "a" es la lista que se pasa por argumento para borrar el nodo en una posicion "0"
* La clave de este metodo es el metodo borrar, entonces nadamas se llama para que
* borre el nodo en la posicion 0
*/
static void borraInicio(listaLSE a){
borra(a, 0);
}
/*
* Borrar al final del apuntador
* "a" es la lista que se pasa por argumento para borrar el nodo en una posicion "i"
* La clave de este metodo es el metodo borrar, entonces nadamas se llama para que
* borre un nodo en la posicion i que es el limite
*/
static void borraFinal(listaLSE a){
int i = cuentame(a);
borra(a, i);
}
/*
* Imprime en forma de una lista los nodos existentes, valida si no existe la lista
* ó si esta se encuentra vacia.
* "a" es la lista que se pasa por argumento para imprimir, "numerar" es un booleano
* que en caso de ser true muestra la posicion del nodo
*/
static void imprime(listaLSE a, boolean numerar){
if(a == null) System.out.println("La lista no ha sido creada");
if(a.siguiente == null) System.out.println("La lista esta vacia");
for(int i = 1; a.siguiente != null; i++){
if(i < 10 & numerar) System.out.print(0);
if(numerar) System.out.print(i + ".- ");
else System.out.print("- ");
a = a.siguiente;
System.out.println(a.dato);
}
}
}