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


0