Implementación Avanzada de Listas Enlazadas Simples en Java: Operaciones CRUD Esenciales
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 5,69 KB
Especificación del Ejercicio: Lista Enlazada de Enteros
Este documento presenta la implementación completa de una Lista Enlazada Simple (ListaEnlazada) en Java, incluyendo la definición de la clase Nodo y la clase principal de prueba (MainListaEnlazadaEnteros2). Como adición al ejercicio anterior, la lista enlazada debe soportar las siguientes operaciones fundamentales, las cuales han sido desarrolladas:
Operaciones Requeridas en la Clase ListaEnlazada
public void aniadirAlFinal(int dato): Añade un nodo al final de la lista.public void aniadirAlPrincipio(int dato): Añade un nodo al inicio de la lista.public void recorrerLista(): Recorre la lista imprimiendo los datos de los nodos por consola.public boolean existeElemento(int dato): Devuelvetruesi el dato está presente en la colección.public boolean insertaElementoDespuesDe(int datoABuscar, int datoAInsertar): Inserta el datodatoAInsertardespués de la primera ocurrencia dedatoABuscar. Devuelvetruesi la inserción fue exitosa; de lo contrario, devuelvefalse.public boolean borraElemento(int dato): Borra la primera ocurrencia del dato especificado en la lista.
Implementación en Java
Clase Nodo: Definición de la Estructura Básica
class Nodo {
int dato; // Almacena el valor del nodo
Nodo siguiente; // Referencia al siguiente nodo en la lista
// Constructor para inicializar un nodo con un dato
public Nodo(int dato) {
this.dato = dato;
this.siguiente = null;
}
}
Clase ListaEnlazada: Gestión de Operaciones
class ListaEnlazada {
private Nodo cabeza; // Primer nodo de la lista
// Constructor que inicializa la lista como vacía
public ListaEnlazada() {
this.cabeza = null;
}
// Método para añadir un nodo al final de la lista
public void aniadirAlFinal(int dato) {
Nodo nuevo = new Nodo(dato);
if (cabeza == null) {
cabeza = nuevo;
} else {
Nodo actual = cabeza;
while (actual.siguiente != null) {
actual = actual.siguiente;
}
actual.siguiente = nuevo;
}
}
// Método para añadir un nodo al inicio de la lista
public void aniadirAlPrincipio(int dato) {
Nodo nuevo = new Nodo(dato);
nuevo.siguiente = cabeza;
cabeza = nuevo;
}
// Método para recorrer la lista e imprimir los datos
public void recorrerLista() {
Nodo actual = cabeza;
while (actual != null) {
System.out.print(actual.dato + " -> ");
actual = actual.siguiente;
}
System.out.println("null");
}
// Método que verifica si un elemento existe en la lista
public boolean existeElemento(int dato) {
Nodo actual = cabeza;
while (actual != null) {
if (actual.dato == dato) {
return true;
}
actual = actual.siguiente;
}
return false;
}
// Método que inserta un elemento después de un dato específico
public boolean insertaElementoDespuesDe(int datoABuscar, int datoAInsertar) {
Nodo actual = cabeza;
while (actual != null) {
if (actual.dato == datoABuscar) {
Nodo nuevo = new Nodo(datoAInsertar);
nuevo.siguiente = actual.siguiente;
actual.siguiente = nuevo;
return true;
}
actual = actual.siguiente;
}
return false;
}
// Método que borra la primera ocurrencia de un dato específico
public boolean borraElemento(int dato) {
if (cabeza == null) return false; // Si la lista está vacía, no se puede borrar
if (cabeza.dato == dato) { // Si el primer nodo es el que se debe borrar
cabeza = cabeza.siguiente;
return true;
}
Nodo actual = cabeza;
while (actual.siguiente != null) {
if (actual.siguiente.dato == dato) {
actual.siguiente = actual.siguiente.siguiente;
return true;
}
actual = actual.siguiente;
}
return false; // No se encontró el dato en la lista
}
}
Clase Principal MainListaEnlazadaEnteros2 y Pruebas de Funcionalidad
public class MainListaEnlazadaEnteros2 {
public static void main(String[] args) {
ListaEnlazada lista = new ListaEnlazada();
// Añadir elementos al final
System.out.println("--- Añadiendo elementos al final (10, 20, 30) ---");
lista.aniadirAlFinal(10);
lista.aniadirAlFinal(20);
lista.aniadirAlFinal(30);
lista.recorrerLista();
// Añadir elementos al principio
System.out.println("--- Añadiendo elemento al principio (5) ---");
lista.aniadirAlPrincipio(5);
lista.recorrerLista();
// Verificar existencia de elementos
System.out.println("--- Verificando existencia ---");
System.out.println("¿Existe el 20?: " + lista.existeElemento(20));
// Insertar un elemento después de un valor específico
System.out.println("--- Insertando 25 después de 20 ---");
lista.insertaElementoDespuesDe(20, 25);
lista.recorrerLista();
// Borrar un elemento específico
System.out.println("--- Borrando la primera ocurrencia de 10 ---");
lista.borraElemento(10);
lista.recorrerLista();
}
}