miércoles, 18 de noviembre de 2015

Ejercicio Utilizando Listas Simples 3

1.    Escribir un programa que realice las siguientes tareas:
Crear una lista enlazada de números enteros positivos al azar, donde la inserción se realiza por el último nodo.
Recorrer la lista para mostrar los elementos por pantalla.
Eliminar todos los nodos que superen un valor dado.

 Para este ejercicio es importante el conocimiento de la eliminación de nodos ya que el usuario ingresa un valor a ser evaluado con cada elemento de la lista y estos serán eliminados si superan al valor ingresado. Para lo cual usaremos métodos de eliminación que validaran cada posible caso en el que se encuentre la condición de eliminación:

Main:

import java.util.Scanner;

public class Main 
{

 public static int leerEntero(String texto)
 {
  Scanner leer=new Scanner(System.in);
  System.out.println(texto);
  int dato=leer.nextInt();
  return dato;
 }
 
 public static int menu()
 {
  System.out.println("---Menu---");
  System.out.println("1.- Imprimir lista");
  System.out.println("2.- Eliminar nodos que superen un valor dado");
  System.out.println("3.- Salir");
  
 
  int seleccion=leerEntero("Seleccione una opción: ");
  return seleccion;
 }
 
 public static void main(String[] args) 
 {
  Lista coleccion=new Lista();
  int opcion;
  
  
  coleccion.agregarFin(10);
  coleccion.agregarFin(55);
  coleccion.agregarFin(22);
  coleccion.agregarFin(5);
  coleccion.agregarFin(7);
  coleccion.agregarFin(12);
  
  do
  {
   opcion=menu();
   switch(opcion)
   {
   case 1:
    
    System.out.println("Lista Ingresada:");
    coleccion.imprimir();
    break;
   
   case 2:
    int exp=leerEntero("Ingrese el numero base para eliminar datos");
    coleccion.eliminarLista(exp);
    break;
    
   
   default:
    System.out.println("FIN DEL PROGRAMA");
    break; 
   }
  }while(opcion!=3);

 }

}
Lista:

public class Lista 
{
 public Nodo inicio;
 public Nodo fin;

 public Lista()
 {
  inicio=fin=null;
 }

 public Nodo devolver(int numero)
 {
  Nodo aux=inicio;
  int cont=1;
  while(contexp)
    {
     inicio=fin=null;
    }
    else
    {
     if(inicio.getDato()>exp)
     {
      inicio=inicio.getSiguiente();
     }
     else
     {
      Nodo anterior=inicio;
      Nodo siguiente=inicio.getSiguiente();
      while(anterior!=null)
      {
       if(anterior.getDato()>exp)
       {
        eliminarNodo(anterior.getDato());
       }
       
       anterior=anterior.getSiguiente();
      }
      
      
     }
    }
   }
 
  }   
 }
 
 public void eliminarNodo(int info)
 {
  if(inicio!=null)
  {
   if(inicio==fin&&inicio.getDato()==info)
   {
    inicio=fin=null;
   }
   else
   {
    if(inicio.getDato()==info)
    {
     inicio=inicio.getSiguiente();
    }
    else
    {
     Nodo anterior=inicio;
     Nodo siguiente=inicio.getSiguiente();
     
     while(siguiente!=null&&siguiente.getDato()!=info)
     {
      anterior=siguiente;
      siguiente=siguiente.getSiguiente();
     }
     
     if(siguiente!=null)
     {
      anterior.setSiguiente(siguiente.getSiguiente());
      if(siguiente==fin)
      {
       fin=anterior;
      }
     }
    }
   }
  }
 }

}
Nodo:

public class Nodo 
{
 private int dato;
 private Nodo anterior;
 private Nodo siguiente;

 public Nodo(int dato, Nodo anterior, Nodo siguiente)
 {
  this.dato=dato;
  this.anterior=anterior;
  this.siguiente=siguiente;
 }

 public Nodo(int dato)
 {
  this.dato=dato;
  this.anterior=null;
  this.siguiente=null;
 }

 public int getDato() 
 {
  return dato;
 }

 public void setDato(int dato) 
 {
  this.dato = dato;
 }

 public Nodo getAnterior() 
 {
  return anterior;
 }

 public void setAnterior(Nodo anterior) 
 {
  this.anterior = anterior;
 }

 public Nodo getSiguiente() 
 {
  return siguiente;
 }

 public void setSiguiente(Nodo siguiente)
 {
  this.siguiente = siguiente;
 }

}


Ejecucion en consola:

4 comentarios:

  1. Hola David
    Como tarea me dejaron el mismo ejercicio pero debo diseñar el algoritmo como seria este. me puedes reponder al correo de louresborras@gmail.com. gracias

    ResponderEliminar
  2. por que en while colocaste (contexpo) ?

    si nunca creaste la variable?

    ResponderEliminar