Skip to content

Instantly share code, notes, and snippets.

@alonsoir
Created October 18, 2024 11:54
Show Gist options
  • Save alonsoir/42766153aca62d3cdc24082626cee843 to your computer and use it in GitHub Desktop.
Save alonsoir/42766153aca62d3cdc24082626cee843 to your computer and use it in GitHub Desktop.
ejemplo lista enlazada en java
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