Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.2 kB
2
Indexable
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;
        }
    }
}