Всем привет! Объясните, пожалуйста, последние строчки снизу. Всё ли я правильно понимаю?
public class StringsLinkedList {
private Node first = new Node(); // создание приватного объекта first правильно?
private Node last = new Node(); // создание приватного объекта last правильно?
public StringsLinkedList() {
first.next = last; // что делает данная строка? почему идёт запись first.next?
last.prev = first; // что делает данная строка last.prev?
Я понимаю откуда идут переменные first и last, но не понимаю откуда идёт .next .prev
}
public void printAll() { // тут вопросов нет
Node currentElement = first.next;
while ((currentElement) != null) {
System.out.println(currentElement.value);
currentElement = currentElement.next;
}
}
public void add(String value) { // принимаем значение
Node node = new Node(); // создаем новый объект Node с именем node
node.value = value; // присваиваем ему значение
Node lastNode = last.prev; // тут не понимаю
lastNode.next = node; // тут не понимаю
node.prev = lastNode; // тут не понимаю
last.prev = node; // тут не понимаю
}
public static class Node { // тут вопросов нет
private Node prev;
private String value;
private Node next;
}
}
Roman Zlotin
14 уровень
Осталась куча вопросов после решения! Есть у нас объяснительная бригада?)
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
MapXyZ
5 апреля 2022, 13:17
Node node = new Node(); // создаем новый объект Node с именем node
node.value = value; // присваиваем ему значение
Всё верно... но ты здесь заполнится только одно поле из 3-х у объекта node.
Осталось незаполненными еще 2:
next (его мы не заполняем, так как ссылка на следующий объект не нужна - это всегда последний объект в цепочке).
prev (сюда нужно занести ссылку на предыдущий объект) - об этом ниже.
Node lastNode = last.prev; // тут не понимаю
lastNode.next = node; // тут не понимаю
node.prev = lastNode; // тут не понимаю
last.prev = node; // тут не понимаю
Node lastNode = last.prev // левая часть - создается объект lastNode (представь что он уже существует - это предыдущий нод) который = last.prev (если помнишь, то в этом поле хранится ссылка на предыдущий объект т.к. он до нашего объекта был последним) т.е. если объект уже существовал, то вытянится его ссылка, а если нет, то в этом поле была ссылка на объект fist.
lastNode.next = node; // слева мы заносим в поле next предыдущего объекта (lastNode) значение, которое = node ,то есть ссылку на наш объект. Это нужно чтобы предыдущий объект ссылался на наш новый и цепочка не разрывалась.
node.prev = lastNode; // в поле prev текущего объекта мы заносим значение lastNode ( то есть если у нас есть объект предыдущий то мы занесем ссылку на него, если его нет то возьмется ссылка на поле prev. объекта first (а оно null).
last.prev = node; // В объект last в поле prev заносим ссылку на наш новый объект, так как он теперь будет последним.
ПС: Сори если слишком нагромоздил ☺️
+4
MapXyZ
5 апреля 2022, 12:51
first.next = last; // что делает данная строка? почему идёт запись first.next?
last.prev = first; // что делает данная строка last.prev?
представь себе что first и last это ссылки на таблицы из 3х полей: next, prev, value....
так вот с помощью записей выше заполняются поля для этих таблиц.
Например first.next = last; // заполняет поле next в таблице fist записью "ссылка на объект last"
2-я запись аналогично...
по сути обе эти записи задают первоначальные параметры полей для таблиц first и last пока еще не создано ни одного объекта Node.
0
milyasow
22 марта 2022, 16:10
Открой задачу, перейди в обсуждение, выбери сортировку комментариев по популярности - там hamster🐹 все эти вопросы подробно разжевала.
0