public void add(String value) {
if (first.next == null) {
Node node = new Node();
node.value = value;
first.next = node;
}
if (last.prev == null) {
last.prev = first.next;
return;
}
Node node = new Node();
node.value = value;
Node lastNode = last.prev;
lastNode.next = node;
node.prev = lastNode;
last.prev = node;
}
WelcumeToTheClubBuddy
51 уровень
Можете подробно объяснить как работает этот блок кода из правильного решения?
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Семён
14 августа 2021, 16:21
Переменные класса Node:
value - само значение
prev - ссылка на предыдущий элемент
next - ссылка на следующий элемент
Node first не должна иметь значение, она указывает только на первый элемент(first.next);
Node last также не содержит значения, а только указывает на последний элемент(last.prev).
public void add(String value) {
if (first.next == null) { // если нет ссылки на первый элемент, т.е список пуст
Node node = new Node(); // создаем элемент
node.value = value; // присваиваем значение
first.next = node; // указываем что элемент первый
}
if (last.prev == null) { //если ссылка на последний элемент пуста
last.prev = first.next; // ссылка на последний элемент - ссылка на первый
return; // выходим из метода
}
//тут код работает с добавлением 2-ого и следующих элементов
Node node = new Node(); //создаем новый объект типа Node
node.value = value; // присваиваем значение переменной
// теперь надо расставить ссылки. Наш элемент должен стать последним
Node lastNode = last.prev; // берем последний элемент из списка, ссылку на который хранит last
lastNode.next = node; // ссылка на след элемент указывает на созданный
node.prev = lastNode; // новому указываем что lastNode предыдущий
last.prev = node; // указываем что элемент теперь последний
}
+10
Gefest
17 августа 2021, 19:32
Семён шестого уровня))))
В обсуждении уже вставлял это картинку, но вставлю и сюда (а почему бы и нет)
0
Gefest
17 августа 2021, 19:34
а вообще всё должно выглядеть немного элегантнее:
+2
Gefest
17 августа 2021, 19:39решение
А ВООБЩЕ!
Если бы при инициализации LinkedList разрабы задания инициализировали ещё и
то весь код мог бы делаться без if. Выглядело бы так:
И собственно всё +6
Семён
20 августа 2021, 10:48
Что Вас смущает в моем уровне?
Вроде везде, постоянно пишут: "правильные решения" не канон, есть куча других более коротких решений. Думаю каждый пишет как может на данный момент. Главное правильная работа и чтоб компилятор принял
Очень странно что "решение" поставили под Вашим последним постом. По факту вопрос состоял в пояснении кода ответа. Если имелось ввиду про пояснении кода и работы самого LinkedList то под это больше подходит Ваша картинка.
А ВООБЩЕ!
Если бы при инициализации LinkedList разрабы задания инициализировали ещё и
В условиях задачи нет ограничения на изменение других методов или переменных, а указанное Вами, считаю, все же небольшая подсказка, до которой каждый должен дойти сам. 0
Sulf8
27 августа 2021, 10:00
решил так же
0
Александр Банников
10 августа 2021, 12:29
Попробовать объяснить конечно можно, но сам еще до конца не понимаю...
0