Как head обновляется новыми узлами в реализации Linkedlist на Java

#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 не обновляется, в нем всегда остается одна и та же ссылка на первый элемент списка. любой новый узел добавляется в конец списка.

конечно, вы можете сохранить ссылку на хвостовой узел и сэкономить некоторое время на циклическом просмотре списка.