Created
October 18, 2024 11:54
-
-
Save alonsoir/42766153aca62d3cdc24082626cee843 to your computer and use it in GitHub Desktop.
ejemplo lista enlazada en java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ListaDobleEnlazada<T> { | |
private Nodo<T> cabeza; | |
private Nodo<T> cola; | |
// Clase interna Nodo | |
private static class Nodo<T> { | |
T dato; | |
Nodo<T> siguiente; | |
Nodo<T> anterior; | |
public Nodo(T dato) { | |
this.dato = dato; | |
this.siguiente = null; | |
this.anterior = null; | |
} | |
public T getDato() { | |
return dato; | |
} | |
} | |
// Constructor de la lista | |
public ListaDobleEnlazada() { | |
cabeza = null; | |
cola = null; | |
} | |
// Método para insertar un nuevo dato | |
public void insertar(T dato) { | |
if (dato == null) { | |
throw new IllegalArgumentException("El dato no puede ser nulo."); | |
} | |
Nodo<T> nuevoNodo = new Nodo<>(dato); | |
if (cabeza == null) { | |
cabeza = nuevoNodo; | |
cola = nuevoNodo; | |
} else { | |
nuevoNodo.anterior = cola; | |
cola.siguiente = nuevoNodo; | |
cola = nuevoNodo; | |
} | |
} | |
// Método para eliminar un nodo con un dato específico | |
public void eliminar(T dato) { | |
if (dato == null) { | |
throw new IllegalArgumentException("El dato no puede ser nulo."); | |
} | |
Nodo<T> actual = cabeza; | |
while (actual != null && !actual.getDato().equals(dato)) { | |
actual = actual.siguiente; | |
} | |
if (actual == null) { | |
return; // Nodo no encontrado | |
} | |
if (actual == cabeza) { | |
cabeza = cabeza.siguiente; // Mover la cabeza | |
if (cabeza != null) { | |
cabeza.anterior = null; // Actualizar anterior | |
} | |
} else { | |
actual.anterior.siguiente = actual.siguiente; // Enlazar anterior con siguiente | |
} | |
if (actual == cola) { | |
cola = cola.anterior; // Mover la cola | |
if (cola != null) { | |
cola.siguiente = null; // Actualizar siguiente | |
} | |
} else { | |
if (actual.siguiente != null) { | |
actual.siguiente.anterior = actual.anterior; // Enlazar siguiente con anterior | |
} | |
} | |
} | |
// Método para imprimir la lista de forma normal | |
public void imprimir() { | |
Nodo<T> actual = cabeza; | |
while (actual != null) { | |
System.out.print(actual.dato + " "); | |
actual = actual.siguiente; | |
} | |
System.out.println(); | |
} | |
// Método para imprimir la lista en orden inverso | |
public void imprimeR() { | |
Nodo<T> actual = cola; | |
while (actual != null) { | |
System.out.print(actual.dato + " "); | |
actual = actual.anterior; | |
} | |
System.out.println(); | |
} | |
// Método para obtener la representación inversa como cadena | |
public String obtenerInversaComoCadena() { | |
StringBuilder inv = new StringBuilder(); | |
Nodo<T> actual = cola; | |
while (actual != null) { | |
inv.append(actual.dato).append(" "); | |
actual = actual.anterior; | |
} | |
return inv.toString().trim(); // Retorna la cadena sin espacios al final | |
} | |
public static void main(String[] args) { | |
ListaDobleEnlazada<Integer> lista = new ListaDobleEnlazada<>(); | |
lista.insertar(10); | |
lista.insertar(20); | |
lista.insertar(30); | |
System.out.println("Lista después de insertar 10, 20, 30:"); | |
lista.imprimir(); // Salida: 10 20 30 | |
lista.eliminar(20); | |
System.out.println("Lista después de eliminar 20:"); | |
lista.imprimir(); // Salida: 10 30 | |
System.out.println("Impresión inversa:"); | |
lista.imprimeR(); // Salida: 30 10 | |
System.out.println("Cadena inversa:"); | |
System.out.println(lista.obtenerInversaComoCadena()); // Salida: 30 10 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment