public class DoublyCircularLinkedList { private static class Node { T data; Node next; Node prev; Node(T data) { this.data = data; this.next = null; this.prev = null; } } private Node head; private int size; public DoublyCircularLinkedList() { head = null; size = 0; } // Método para agregar un elemento al final de la lista public void add(T item) { Node newNode = new Node<>(item); if (head == null) { head = newNode; head.next = head; head.prev = head; } else { Node last = head.prev; last.next = newNode; newNode.prev = last; newNode.next = head; head.prev = newNode; } size++; } // Método para eliminar un elemento por su valor public boolean remove(T item) { if (head == null) { return false; } Node current = head; do { if (current.data.equals(item)) { if (size == 1) { head = null; } else { Node prevNode = current.prev; Node nextNode = current.next; prevNode.next = nextNode; nextNode.prev = prevNode; if (current == head) { head = nextNode; } } size--; return true; } current = current.next; } while (current != head); return false; } // Método para verificar si la lista está vacía public boolean isEmpty() { return head == null; } // Método para obtener el tamaño de la lista public int size() { return size; } // Método para imprimir los elementos de la lista public void printList() { if (head == null) { System.out.println("La lista está vacía."); return; } Node current = head; do { System.out.print(current.data + " "); current = current.next; } while (current != head); System.out.println(); } public static void main(String[] args) { DoublyCircularLinkedList list = new DoublyCircularLinkedList<>(); list.add(1); list.add(2); list.add(3); System.out.print("Elementos en la lista: "); list.printList(); System.out.println("Eliminando el elemento 2: " + list.remove(2)); System.out.print("Elementos en la lista después de eliminar: "); list.printList(); System.out.println("Tamaño de la lista: " + list.size()); } }