public class StringLinkedList {
private Node first = new Node();
private Node last = new Node();
public void printAll() {
Node currentElement = first.next;
while ((currentElement) != null) {
System.out.println(currentElement.value);
currentElement = currentElement.next;
}
}
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;
}
public static class Node {
private Node prev;
private String value;
private Node next;
}
}
что значит этот кусок кода?
Node node = new Node(); \\ создаем обьект
node.value = value; \\ присваиваем ему значение
Node lastNode = last.prev; \\создаем переменную и куда она указывает?
lastNode.next = node; \\ это вообще непонятно
node.prev = lastNode; \\это у обьекта node , ссылку на предыдущий элемент указываем на переменную lastNode?
last.prev = node; \\ ?
Артем
29 уровень
Подскажите пожалуйста
Обсуждается
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ГоффMaster
4 июля 2023, 09:09
Node lastNode = last.prev; \\создаем переменную и куда она указывает?
Она указывает на последний значимый элемент списка
lastNode.next = node; \\ это вообще непонятно
Записываем новый элемент после последнего
node.prev = lastNode; \\это у обьекта node , ссылку на предыдущий элемент указываем на переменную lastNode?
Линкуем новый, теперь послелний элемент с прелпоследним
last.prev = node; \\ ?
Линкуем служебный last с последним значимым, только что добавленным в список элементом
0
АртемExpert
4 июля 2023, 09:03
и что значит last.prev = first.next
first ----- node -------last
first.next --- node
last.prev --- first.next
тоесть куда указывает last.prev??
0
ГоффMaster
4 июля 2023, 09:14
Погугли, как устроены linked list.
Это цепочка, в которой есть два служебных элемента, first и last.
Каждый элемент состоит из значения и двух полей - prev и next. Поле прев указывает на предыдущий в списке элемент, поле некст - на следующий.
У служебных фёрст и ласт одно из этих полей null.
Что бы добавить элемент, нужно у двух соседних изменить поля prev и next, а так же у самого добавленного элемента их правильно заполнить
0
АртемExpert
4 июля 2023, 10:00
Как устроен я понимаю, просто путает именно вот эти LastNode что к чему )
Nod lastNode к каком обьекту относится?
0
АртемExpert
4 июля 2023, 10:14
тоесть есть first и есть ласт
мы first.next указываем на созданную node
а last.prev указывет на first next тоесть на туже node
получается
first last
first.next -------new Node --------last.prev
чтобы добавить следующую node мы создаем new Node
last node prev last
node -------- ------ prev
теперь first -------new Node --------new Node --------- last
last node
next -------------
я правильно расставил?
0
ГоффMaster
4 июля 2023, 21:03
Не совсем понял тебя, ещё и псевдографики на телефоне разъехалась. Ппопробую вот так объяснить:
Вот у нас лист из 3-х элементов: а, б, в
first.next указывает на а
а.prev указывает на first
a.next указывает на б
б.prev указывает на а.
...
в.next указывает на last
last.prev указывает на в.
Добавляем г, для этого необходимо в в.next и в last.prev записать г, а так же заполнить поля prev и next у г:
г.prev = last.prev (то-есть в)
г.next = last (это понятно)
last.prev.next = г (last.prev это пока ещё в, закидываем ему в некст г)
last.prev = г (это понятно)
0
ГоффMaster
4 июля 2023, 21:13
Если же список пустой, то там только две служебные ноды, first и last.
first.next указывает на last, а last.prev указывает на first.
Втыкание нового элемента по тому же принципу.
0
АртемExpert
5 июля 2023, 02:01
Понял , спасибо!
0
АртемExpert
5 июля 2023, 02:08
Единственное last.prev.next = г это получается
Last prev next в ——-> г <———- last prev
0
ГоффMaster
5 июля 2023, 05:53
Да, именно так. last.prev.next - это поле next той ноды, которая перед last.
0
hidden #3303140
5 июля 2023, 10:03
https://javarush.com/help/88991
тут объясняется со схемой
0