#java #nodes
Вопрос:
У меня есть метод вставки, который вставляет узел в связанный список. Проблема в том, что каждый раз, когда добавляется узел, недавно добавленный узел становится головным узлом и теряет узлы до него. Как сохранить значение головного узла и связать его со следующими узлами, которые будут добавлены?
Вот код
private Node<D> startOfNode;
private Node<D> endOfNode;
public void insert(D data) throws ListOverflowException {
Node<D> head = new Node<>(data);
startOfNode = head;
if (head.getData() != null) {
Node<D> node1 = new Node<>(data);
head.setNext(node1);
endOfNode = node1;
}
}
Я использую этот метод печати:
public void printList() {
Node<D> curr = startOfNode;
int counter = 0;
while(curr!=null) {
System.out.println("Item " counter " :" curr.getData());
curr = curr.getNext();
counter ;
}
System.out.println("Item " counter " :" null);
}
Оба эти метода принадлежат к одному и тому же классу. Я использую класс tester и создаю экземпляр указанного класса.
Когда я пытаюсь добавить два узла со значениями 20 и 30, я получаю следующий результат:
Пункт 0 :30
Пункт 1 :30
Но это должно быть:
Пункт 0 :20
Пункт 1 :30
Комментарии:
1. как вы печатаете список?
Ответ №1:
Вы сбрасываете заголовок каждый раз, когда добавляете данные в свой метод вставки.
Вы можете выполнить итерацию с начального узла, и когда вы обнаружите, что следующий узел равен нулю, вы можете добавить новый узел и присоединить его к следующему текущему узлу и просто обновить конечный узел.
Или вы можете перейти к конечному узлу и прикрепить новый узел с переданным значением.
Простой способ сделать это показан ниже:
private Node head;
private Node tail;
public void insert(int data){
Node newNode = new Node(data); //Create
if(tail != null) { //Link
tail.next = newNode;
}
if(head == null) { //Update head.
head = newNode;
}
tail = newNode; //Update tail.
}
Ответ №2:
Вы не должны сбрасывать головку во время вставки. Приведенный ниже код должен работать должным образом:
private Node<D> startOfNode;
private Node<D> endOfNode;
public void insert(D data) throws ListOverflowException {
iterator = startOfNode;
if(iterator == null) {
startOfNode = new Node<D>(data);
endOfNode = startOfNode;
return;
}
while(iterator.getNext() != null) {
iterator = iteartor.getNext()
}
Node<D> end = new Node<>(data);
iterator.setNext(end);
endOfNode = end;
}