import java.util.Optional;
public class DoublyLinkedListExample {
public static void main(String[] args) {
DoublyLinkedList list = new DoublyLinkedList();
// Добавление элементов в список
list.add("Элемент 1");
list.add("Элемент 2");
list.add("Элемент 3");
// Вывод элементов списка
list.printAllElements();
// Получение элемента по индексу
Optional<String> element = list.get(1);
if (element.isPresent()) {
System.out.println("Элемент с индексом 1: " + element.get());
} else {
System.out.println("Элемент не найден.");
}
}
}
class DoublyLinkedList {
private Node head;
private int size;
public DoublyLinkedList() {
head = new Node("Голова");
head.next = head;
head.prev = head;
size = 0;
}
public void add(String data) {
Node newNode = new Node(data);
if (size == 0) {
newNode.next = head;
newNode.prev = head;
head.next = newNode;
head.prev = newNode;
} else {
Node lastNode = head.prev;
lastNode.next = newNode;
newNode.prev = lastNode;
newNode.next = head;
head.prev = newNode;
}
size++;
}
public Optional<String> get(int index) {
if (index < 0 || index >= size) {
return Optional.empty();
}
Node current = head.next;
for (int i = 0; i < index; i++) {
current = current.next;
}
return Optional.of(current.data);
}
public void printAllElements() {
Node current = head.next;
for (int i = 0; i < size; i++) {
System.out.println(current.data);
current = current.next;
}
}
private class Node {
String data;
Node prev;
Node next;
Node(String data) {
this.data = data;
}
}
}