Listas Simples y Dobles en Java

Iré subiendo gradualmente a medida que los vaya revisando que funcionen adecuadamente los códigos de listas simples y dobles implementadas en Java en mi curso de Estructura de Datos y Algoritmos.

Pueden Ir probando estos códigos compilando los archivos que contienen a la clase main.

Lista SImplemente Enlazada

En este ejemplo, hemos creado una clase Nodo que tiene dos atributos: el dato y una referencia al siguiente nodo. La clase ListaSimple contiene los métodos para insertar elementos en la lista simplemente enlazada y mostrar su contenido.

Compilar: javac Main.java

class Nodo {
    int dato;
    Nodo siguiente;

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

class ListaSimple {
    Nodo inicio;

    public ListaSimple() {
        inicio = null;
    }

    public void insertar(int dato) {
        Nodo nuevo = new Nodo(dato);
        if (inicio == null) {
            inicio = nuevo;
        } else {
            Nodo actual = inicio;
            while (actual.siguiente != null) {
                actual = actual.siguiente;
            }
            actual.siguiente = nuevo;
        }
    }

    public void mostrar() {
        Nodo actual = inicio;
        while (actual != null) {
            System.out.print(actual.dato + " ");
            actual = actual.siguiente;
        }
        System.out.println();
    }
}

public class Main {
    public static void main(String[] args) {
        ListaSimple lista = new ListaSimple();

        lista.insertar(10);
        lista.insertar(20);
        lista.insertar(30);
        lista.insertar(40);

        System.out.println("Lista simplemente enlazada:");
        lista.mostrar();
    }
}

Lista Doblemente Enlazada

En este ejemplo, la clase Nodo tiene tres atributos: el dato, una referencia al nodo siguiente y una referencia al nodo anterior. La clase ListaDoble contiene métodos para insertar elementos al inicio y al final de la lista, así como un método para mostrar el contenido de la lista.

Compilar: javac Main.java

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

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

class ListaDoble {
    Nodo inicio;
    Nodo fin;

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

    public void insertarAlInicio(int dato) {
        Nodo nuevo = new Nodo(dato);
        if (inicio == null) {
            inicio = nuevo;
            fin = nuevo;
        } else {
            nuevo.siguiente = inicio;
            inicio.anterior = nuevo;
            inicio = nuevo;
        }
    }

    public void insertarAlFinal(int dato) {
        Nodo nuevo = new Nodo(dato);
        if (inicio == null) {
            inicio = nuevo;
            fin = nuevo;
        } else {
            nuevo.anterior = fin;
            fin.siguiente = nuevo;
            fin = nuevo;
        }
    }

    public void mostrar() {
        Nodo actual = inicio;
        while (actual != null) {
            System.out.print(actual.dato + " ");
            actual = actual.siguiente;
        }
        System.out.println();
    }
}

public class Main {
    public static void main(String[] args) {
        ListaDoble lista = new ListaDoble();

        lista.insertarAlInicio(10);
        lista.insertarAlInicio(20);
        lista.insertarAlFinal(30);
        lista.insertarAlFinal(40);

        System.out.println("Lista doblemente enlazada:");
        lista.mostrar();
    }
}

También te puede interesar:

Pueder ir al artículo principal:

Códigos Sencillos hechos en Java

16 thoughts on “Listas Simples y Dobles en Java

  1. Pues es que a mi en las listas dobles me sale un error en el caracter…
    No se si se deba al kernel por que despues me sale una ventana y sale el patito de linux y algo dice conforme al kernel.. Pero no lo puedo compilar pues…

  2. Hola BeAsTiEuX, creo q eres la ayuda q he estado buscando x favor necesito de tu ayuda, estoy trabajndo con listas simples y necesito el metodo para borrar elementos repetidos en una lista, es decir nodos repetidos. ejmplo: si tengo 20—>30—>30—->40—> desde el medoto main el programa pregunta x el nodo a eliminar y el usurio tendra q ingresar 30 y deberá eliminar los dos nodos q tienen valor 30, a diferenciar de Eliminar_nodo_especifico
    tengo este codigo pero solo me elimina un nodo especifico:

    int eliminar_valores(int valor){

    Nodo p;
    for(p=cabeza; p.getInfo() != valor; p=p.sig);
    valor = p.getInfo();
    valor = eliminar_especifico(p);
    //p.sig=p.sig;

    //p.sig=null;

    return valor;
    }

    1. insertar al principio
      function removeBeginning(List list) {
      obsoleteNode := list.firstNode
      list.firstNode := list.firstNode.next
      destroy obsoleteNode
      }

  3. no podia irme sin dar las gracias, me ha sido de mucha ayuda,ya que antes tuve que hacer listas enlazadas en c, y ahora en java no sabia como hacerlo mismo……tienes informacion sobre arboles en java???

    1. Hola karina, Para hacer búsquedas en las listas se pueden usar cualquiera de los método de búsquedas que existen, en el caso de las listas la búsquedas se deberían realizar en los nodos, verás que todas las listas tiene una propiedad llamada nodo y estos nodos van a contener el dato almacenado en ese nodo y la dirección del nodo siguiente, es lo que se necesita…

Deja un comentario