Java - Eliminar valor especifico en una LISTA

   
Vista:

Eliminar valor especifico en una LISTA

Publicado por Fozzie (1 intervención) el 10/10/2010 20:02:57
Que onda compañeros, soy novato en esto de la programacion y tengo un pequeño programa en Java Modo Consola que estoy haciendo de un ejemplo de listas.

El programa trabaja asi: tengo un menu para 1- Insertar: pedir los valores para la lista, 2- Mostrar: mostrar los valores q se teclearon/insertaron 3- Eliminar: eliminar el valor especifico que se teclee (sin importar si es del inicio, al final o en medio).

Entonces ya puedo insertar y mostrar, pero no puedo eliminar el valor especifico que se teclea... por ejemplo: si inserto 5 valores (1-2-3-4-5) y elimino el ultimo (5) lo hace perfectamente y me quedan 4 (1-2-3-4) y si vuelvo a eliminar el ultimo (4) lo hae tambien y asi sucesivamente lo hace bien.

Pero... si de esos 5 valores (1-2-3-4-5) elimino el valor "3" y los muestro me quedan estos valores: 1-2-4, cuando deverian de quedarme 1-2-4-5.... no se por que sucede esto, espero me haya explicado bien y entiendan para que puedan ayudarme.

de antemano GRACIAS... este es mi codigo: completo

package listas;
import java.io.*;
import java.util.LinkedList;

class nodo{

public int dato;
public nodo next;
public nodo(int n){//CONSTRUCTOR
dato = n;
next = null;
}
}

class agregar{ //clase agregar

private nodo comienzo;//

public void add(int n){

nodo aux = comienzo;
if(aux == null){

aux = new nodo(n);
comienzo = aux;
}
else{
while(aux.next != null){

aux = aux.next;
}
aux.next = new nodo(n);
}
}//cierra clase agregar

public void Mostrar(){

nodo aux = comienzo;
while(aux!=null){

System.out.println("-----"+aux.dato);
aux = aux.next;
}
}
//aki va el de ELIMINAR

public void eliminar()throws IOException {

BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
int num=0;
nodo aux = comienzo;

System.out.println("\n¿Que numero deseas eliminar?");
num = Integer.parseInt(f.readLine());

if(aux.dato==num)//si es el 1er nodo
comienzo = aux.next;//que el 1er nodo sea el 2do
else
while(aux.next!=null&&aux.next.dato!=num){//recorrr hasta encontrar 1
aux = aux.next;
if(aux.next!=null)//si no a terminado
aux.next=aux.next.next;//salta al sig
}
}

public class Main {

public static void main(String[] args)throws IOException {

BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
int var, op = 0;

agregar l = new agregar();//objeto
System.out.println("PROGRAMA QUE MUESTRA LISTAS (NODOS)\n");

while(op!=4){

System.out.println("1-Insertar Valor\t2-Eliminar\t3-Mostrar\t4-Salir\n");
op = Integer.parseInt(f.readLine());

switch(op){

case 1:
System.out.println("Teclee el Valor del NODO: \n");
var = Integer.parseInt(f.readLine());
l.add(var);
break;
case 2:
l.eliminar();
break;
case 3:
l.Mostrar();
break;
}
}

}

}

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

RE:Eliminar valor especifico en una LISTA

Publicado por Leo (33 intervenciones) el 21/10/2010 06:15:31
Hola maquina! un poco tarde pq recien lo vi pero bueno!

import java.io.*;
import java.util.LinkedList;

class nodo{

public int dato;
public nodo next;
public nodo(int n){//CONSTRUCTOR
dato = n;
next = null;
}
public void setNext(nodo e){
next=e;
}

}

class agregar
{ //clase agregar

private nodo comienzo;//

public void add(int n)
{

nodo aux = comienzo;
if(aux == null){
aux = new nodo(n);
comienzo = aux;
}
else{
while(aux.next != null){
aux = aux.next;
}
aux.next = new nodo(n);
}
}
//cierra clase agregar

public void Mostrar(){

nodo aux = comienzo;
while(aux!=null){

System.out.println("-----"+aux.dato);
aux = aux.next;
}
}
//aki va el de ELIMINAR

public void eliminar()throws IOException {

BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
int num=0;
nodo aux = comienzo;

System.out.println("\n¿Que numero deseas eliminar?");
num = Integer.parseInt(f.readLine());

if(aux.dato==num)
comienzo = aux.next;
else{
nodo actual=comienzo;
nodo anterior=comienzo;
while (actual!=null){
if(actual.dato==num){
anterior.setNext(actual.next);
actual=null;
}
else{
anterior=actual;
actual=actual.next;
}

}
}
}

}
public class Main {

public static void main (String[] args)throws IOException {

BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
int var, op = 0;

agregar l = new agregar();//objeto
System.out.println("PROGRAMA QUE MUESTRA LISTAS (NODOS)\n");

while(op!=4)
{

System.out.println("1-Insertar Valor\t2-Eliminar\t3-Mostrar\t4-Salir\n");
op = Integer.parseInt(f.readLine());

switch(op)
{

case 1:
System.out.println("Teclee el Valor del NODO: \n");
var = Integer.parseInt(f.readLine());
l.add(var);
break;
case 2:
l.eliminar();
break;
case 3:
l.Mostrar();
break;
}
}
}

}


Fijate que a la clase "nodo" le agrege un metodo para modificar el siguente enlace de cualquier nodo!

saludos!
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