Java - Borrar un nodo especifico de una lista

 
Vista:

Borrar un nodo especifico de una lista

Publicado por Carlos Martin (8 intervenciones) el 27/10/2008 20:16:47
Hola, necesito borrar un nodo dado de una lista simple así como de una doble.
He estado tratando pero no me dá los resultados deseados.
Apreciaría mucho su ayuda.
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

RE:Borrar un nodo especifico de una lista

Publicado por Cynthia (21 intervenciones) el 28/10/2008 04:07:26
Hola..no se si te sirva esto:

int EliminarxPos(TLista L, TNodo *p){
TNodo *p_ant;
if(EstaVacia(L)) return 0;
if(p==NULL || !Existe(p)) return 0;
if(p==L->header) return(EliminarPrimero(L));
if(p == L->last) return(EliminarUltimo(L));
p_ant = Anterior(L,P);
p_ant->sig = p->siguiente;
free(p);
return(1);
}

int EliminarPrimero(TLista *L){
TNodo *tmp;
if(EstaVacia(L)) return 0;
if(L->header == L->last)
VaciarLista(L);
else {
tmp = L->header;
L->header = L->header->siguiente;
}
free(tmp);
return(1);
}

int EliminarUltimo(TLista *L){
TNodo *tmp;
if(EstaVacia(L)) return 0;
if(L->header == L->last)
VaciarLista(L);
else{
tmp = L->last;
L->last = Anterior(L->last);
L->last->sig = NULL;
}
free(tmp);
return(1);
}

De las doblemente enlazadas:

int EliminarxPos(TListaD *L, Tnodo *p){
if(p==NULL || !Existe(L,P)) return 0;
if(p==L->header){
return(EliminarPrimero(L));
} else if (P==L->last){
return(EliminarPrimero(L));
}
else {
p->ant->sig = p->sig;
p->sig->ant = p->ant;
free(p);
}
return 1;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar un nodo especifico de una lista

Publicado por Gerardo Aquino (62 intervenciones) el 28/10/2008 06:13:00
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);
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar un nodo especifico de una lista

Publicado por Carlos Martin (8 intervenciones) el 28/10/2008 15:22:32
Gracias a ambos por el código!
Lo que no me queda muy claro es que,una vez que lo implemente y decida por ejemplo, borrar un nodo que contenga el # de identificación 23, como puedo hacer para que después de implementado el método borranodo me muestre la lista sin el nodo con la identificación #23?
Se logra ésto con un simple System.out.println?
Pregunto ésto pq ya usé el método borranodo
listadentificaciones milista=new listaIdentificaciones (); y después de llenar la lista con varios # de identificación lo implemento con milista.borrar(23);
pero me despliega la lista completa!
Que podrá estar pasando que no me quiere borrar dicho nodo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar un nodo especifico de una lista

Publicado por cristian david ordosgoitia est (1 intervención) el 02/09/2009 20:35:36
no se cmo hacer para poner un nodo sob re otro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar un nodo especifico de una lista

Publicado por jhon  (1 intervención) el 23/04/2009 23:01:19
lo que pasa es que tengo un nodo en una lista el cual debo borrar pero primero debo comparar que los datos en el campo info sean el dato a borrar por favor espero me puedan colaborar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar