Круговой двусвязный список Java - Объяснение - PullRequest
0 голосов
/ 11 июня 2018

В данный момент я программирую круговой двусвязный список, и моя задача выполнена, но у меня небольшая проблема с пониманием кода на 100%.

Это код:

if (counter == 0) {
        startpoint = newNode;
        startpoint.next = startpoint;
        startpoint.prev = startpoint;
        head = startpoint;
        currentNode = newNode;

    } else {
        newNode.prev = startpoint.prev;
        newNode.next = startpoint;
        startpoint.prev.next = newNode; <- this is, where I have problems
        startpoint.prev = newNode;
        head = startpoint;
        currentNode = newNode;
    }
    counter++;
}

Первая часть полностью понятна и просто описывает, что первый узел (если нет другого узла) будет указывать на себя, когда вызывается следующий или первый метод.После оператора else первая строка описывает, что первый узел может указывать на второй, а второй на предыдущий, верно?Вторая строка после else просто описывает, что последний узел указывает на первый.В четвертой строке описывается, что первый узел указывает на последний узел, если вызывается предыдущий метод и круг замкнут.Но что именно описывает третья строка?Код определенно работает.

Спасибо за потраченное время!

Привет, Доминик

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Код вставляет newNode непосредственно перед startpoint.3-я строка оператора else просто обновляет узел перед начальной точкой, так что его поле next ссылается на новый узел.

Чтобы сделать его более понятным, можно переписать строку следующим образом:

    Node nodeBeforeStarpoint = startpoint.prev;
    nodeBeforeStartpoint.next = newNode; 
0 голосов
/ 11 июня 2018

Ваш список является круглым.

startpoint.prev - это элемент перед начальной точкой, поэтому это последний элемент списка.

Давайте рассмотрим пример, это ваш список: A>B>C, вы пытаетесь добавить D.

Эта строка: startpoint.prev.next = newNode; свяжет текущий последний элемент (C как A.prev == C) с вашим новым элементом.(C.next = D)

эта строка startpoint.prev = newNode; установит новый элемент как последний элемент списка (A.prev = D).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...