← Назад к вопросам

Может ли первый элемент LinkedList сослаться на предыдущий элемент?

2.0 Middle🔥 141 комментариев
#Коллекции

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

LinkedList: может ли первый элемент сослаться на предыдущий

Краткий ответ: В стандартной LinkedList — нет, первый элемент (head) не имеет ссылки на предыдущий элемент. Но в двусвязной структуре это возможно.

Односвязная LinkedList

// В Java стандартная LinkedList — двусвязная
// Но в учебных целях рассмотрим односвязную:

public class SingleLinkedList<T> {
    private Node head;
    
    private class Node {
        T data;
        Node next;  // Только ссылка вперёд
        
        Node(T data) {
            this.data = data;
        }
    }
    
    // Первый элемент:
    // head.next → второй элемент
    // head.previous → NULL (нет ссылки назад)
}

Двусвязная LinkedList (DoublyLinkedList)

public class DoublyLinkedList<T> {
    private Node head;
    private Node tail;
    
    private class Node {
        T data;
        Node next;       // Ссылка на следующий
        Node previous;   // Ссылка на предыдущий
        
        Node(T data) {
            this.data = data;
        }
    }
}

Структура Java LinkedList

// Java LinkedList является двусвязной:
// [null] ← head → [data1] ← → [data2] ← → [data3]

public class LinkedListStructure {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        
        // Структурно (примерно):
        // head.previous = null
        // head.next → второй элемент
        // second.previous = head
        // second.next = third
        // ...
    }
}

Итерация в обе стороны

public class BidirectionalIteration {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("First");
        list.add("Second");
        list.add("Third");
        
        // Forward iteration
        System.out.println("Forward:");
        for (String s : list) {
            System.out.println(s);
        }
        
        // Backward iteration (благодаря двусвязности)
        System.out.println("Backward:");
        Iterator<String> desc = list.descendingIterator();
        while (desc.hasNext()) {
            System.out.println(desc.next());
        }
    }
}

Вывод: Java LinkedList использует двусвязную структуру, поэтому каждый элемент (кроме head и tail) имеет ссылки и вперёд, и назад.

Может ли первый элемент LinkedList сослаться на предыдущий элемент? | PrepBro