Помогите понять алгоритм присвоение ссылок, а именно:
Node node = new Node(); //создали объект в очереди
node.value = value; //объект имеет собственное значение
// у данного объекта node.prev ссылается на first и равен null, node.next ссылается на last и также равен null
Node lastNode = last.prev; // данной командой присвоили ссылку lastNode, теперь lastNode стоит в очереди ПОСЛЕ node
lastNode.next = node; // данной командой взяли ссылку, которой node обращалась к last, теперь lastNode обращается к last
node.prev = lastNode; // вот тут у меня затык(абсолютное непонимание). я понимаю так, что node.prev изначально имеет ссылку на first и у нас изначально
// была следующая очерёдность: first --> node --> last. Мы же вставляем переменную lastNode в конец?? По итогу у нас должна получиться такая очерёдность:
// first --> node --> lastNode --> last
// Данная команда: node.prev = lastNode; (на сколько я понимаю) присваивает ссылку node.prev переменной lastNode, тем самым очерёдность получается такая:
// first --> lastNode --> node --> last; Вот тут у меня никак не стыкуется.
last.prev = node; // здесь также ссылка от "last" идёт к node, а я думал, что должна от "last" идти к "lastNode"
x на схеме может быть любым числом от нуля (когда в цепочке вообще нет звеньев) и до бесконечности.
Как добавить звенья в такую цепочку? Надо посмотреть, какое звено является последним на текущий момент и добавить новое звено между ним, и "якорем" last, символизирующим конец цепочки. Что значит "добавить между ними"? Сделать так, чтобы звено, которое ссылалось на якорь, стало ссылаться на новое звено, и наоборот. Проще объяснить на схеме
new node - это твой объект node в коде.
node x - это то, что в твоём коде обозначено lastNode.
Эта строка означает: посмотреть, на что ссылается last.prev и сохранить в переменную lastNode. Это тот блок, который на схеме называется "node x". На первой схеме (до изменений) last.prev указывает на него. А вторая схема означает все изменения, которые нужно сделать при добавлении нового звена: ты должен убрать связи между node x и last и добавить связи между ними и новой нодой node. При этом надо не забыть при добавлении самой первой ноды также добавить связь с первым якорем first