#java #linked-list
#java #связанный список
Вопрос:
Я изучаю реализацию LinkedList на Java. При этом я не понимаю концепцию, как head обновляется новыми узлами после выполнения приведенного ниже кода в LinkedList.java хотя мы не обновляем head.
n.next = node;
Пожалуйста, дайте мне понять концепцию. Заранее спасибо.
Node.java
public class Node {
int data;
Node next;
}
LinkedList.java
public class LinkedList {
Node head;
void insert(int data) {
Node node = new Node();
node.data = data;
node.next = null;
if(head==null) {
head = node;
}else {
Node n = head;
while(n.next!=null) {
n = n.next;
}
n.next = node; //--head is also updating with new nodes--//
}
}
void display() {
Node n = head;
do {
System.out.println(n.data);
n=n.next;
}
while(!(n.next==null));
}
}
Main.java
public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.insert(10);
list.insert(20);
list.insert(30);
list.insert(40);
list.display();
}
}
Комментарии:
1. просто проверьте сами,
insert
какhead
заполняется (возможно, дополнительноSystem.out
…)
Ответ №1:
Head устанавливается на первый узел, который вы создаете в списке, и никогда не меняется. при добавлении новых узлов цикл переходит в конец списка (находит «хвостовой» узел с next == null) и устанавливает новый узел в качестве своего «(хвостового) «следующего».
head не обновляется, в нем всегда остается одна и та же ссылка на первый элемент списка. любой новый узел добавляется в конец списка.
конечно, вы можете сохранить ссылку на хвостовой узел и сэкономить некоторое время на циклическом просмотре списка.