jueves, 13 de agosto de 2015

Lista doblemente enlazada en java

Generar lista doblemente enlazada
1. con inserción al inicio
2. con inserción al final
3. eliminar un elemento
4. modificar un elemento
5. impresión ascendente y descendente
6. copiar los elemento a una lista simple

Código Aquí

package listadoblementeenlazada;

import java.util.Scanner;

public class ListaDoblementeEnlazada {

    static class Nodo {

        int dato;
        Nodo ant;
        Nodo sig;
    }

    static class NodoSimple {

        int dato;

        NodoSimple sig;
    }

    public static int validarNumero() {
        Scanner leer = new Scanner(System.in);
        int valorNum = 0;
        boolean numero = false;

        while (!numero) {
            try {

                String cadena = leer.nextLine();
                valorNum = Integer.parseInt(cadena);
                numero = true;
            } catch (Exception e) {
                System.out.println("Error, ingrese un numero");

            }
        }
        return valorNum;
    }

    public static void main(String[] args) {

        // Insercion al incio
        System.out.println("Ingrese el multiplo m:");
        int m = validarNumero();
        System.out.println("Ingrese el tamaño n:");
        int n = validarNumero();;
        Nodo top = null;
        for (int i = 1; i <= n; i++) {
            Nodo temp = new Nodo();
            temp.dato = i * m;
            temp.ant = null;
            if (top == null) {
                temp.sig = null;

            } else {
                temp.sig = top;
                top.ant = temp;
            }

            top = temp;
        }
        System.out.println("Impresion de lista insercion al inicio");
        //Impresion ascendente
        Nodo temp1 = top;
        while (temp1 != null) {
            System.out.println("" + temp1.dato);
            temp1 = temp1.sig;

        }
        // Insercion al final

        Nodo top1 = null;
        Nodo ultimo = null;
        Nodo temp;
        for (int i = 1; i <= n; i++) {
            temp = new Nodo();
            temp.dato = i * m;
            temp.sig = null;
            if (top1 == null) {
                temp.ant = null;
                top1 = temp;
            } else {
                ultimo.sig = temp;
                temp.ant = ultimo;
            }
            ultimo = temp;
        }
        System.out.println("Impresion de lista insercion al final");
        //Impresion ascendente
        temp1 = top1;
        while (temp1 != null) {
            System.out.println("" + temp1.dato);
            temp1 = temp1.sig;

        }
        System.out.println("Impresion al de lista insercion al inicio  ascendente");
        //Impresion ascendente
        temp1 = top;
        while (temp1 != null) {
            System.out.println("" + temp1.dato);
            temp1 = temp1.sig;

        }
        System.out.println("Impresion al de lista insercion al inicio  descendente");
        //Impresion desendente
        temp1 = top;
        while (temp1.sig != null) {

            temp1 = temp1.sig;
        }
        while (temp1 != null) {
            System.out.println("" + temp1.dato);
            temp1 = temp1.ant;
        }
        System.out.println("Ingrese el elemento a eliminar:");
        //Eliminar
        int buscar = validarNumero();
        temp1 = top;
        while (temp1.dato != buscar && temp1.sig!=null) {
            temp1 = temp1.sig;

        }
        if(temp1.sig==null  && temp1==null){
            System.out.println("No se encontro el elemento");
           
        }else{
        temp1.ant.sig = temp1.sig;
        temp1.sig.ant = temp1.ant;
        }
        System.out.println("Impresion eliminar");
        //Impresion ascendente
        temp1 = top;
        while (temp1 != null) {
            System.out.println("" + temp1.dato);
            temp1 = temp1.sig;

        }
        System.out.println("Ingrese el elemento a modificar:");
        //modificar

        buscar = validarNumero();
        temp1 = top;
        while (temp1.dato != buscar && temp1.sig!=null) {//temp1.sig==null para que no se haga un bucle infinito
            temp1 = temp1.sig;
        }if(temp1.sig==null && temp1==null){
            System.out.println("No se encontro el elemento");
           
        }else{
        System.out.println("Ingrese el numero a modificar:");
        int modificar = validarNumero();
        temp1.dato = modificar;
        }
        System.out.println("Impresion al modificar");
        //Impresion ascendente
        temp1 = top;
        while (temp1 != null) {
            System.out.println("" + temp1.dato);
            temp1 = temp1.sig;

        }
        //
        temp1=top;
        NodoSimple top2 = null;
        NodoSimple ultimo1 = null;
        NodoSimple temp2;
       
       
        while(temp1!=null){
           
        //for (int i = 1; i <= n; i++) {
            temp2 = new NodoSimple();
            temp2.dato = temp1.dato;
            temp2.sig = null;
            if (top2 == null) {
                top2 = temp2;
            } else {
                ultimo1.sig = temp2;
            }
            ultimo1 = temp2;
            temp1=temp1.sig;
        }
        System.out.println("Lista doblemente enlazada pasada a lista simple");
        temp2=top2;
        while (temp2 != null) {
            System.out.println("" + temp2.dato);
            temp2 = temp2.sig;

        }
    }


}

Corrida 

No hay comentarios:

Publicar un comentario