Многократные наблюдения
Во-первых, list.head не инициализируется, хотя переменной перемещения в методе insertNode назначается ссылка на новый узел, она передается по значению, поэтому она не отражает обновленную ссылку обратно на list.node в основном методе. Вы можете обновить метод insertNode, чтобы он возвращал Node, возвращал 'move' обратно в основной метод и назначал возвращаемое значение для list.head. как показано ниже
// in main
list.head = list.insertNode(1, list.head);
list.head = list.insertNode(2, list.head);
list.head = list.insertNode(3, list.head);
// in insertNode method return the move node back to caller
public Node insertNode(int value, Node move) {
Node temp = new Node(value);
temp.next = move;
move = temp;
return move;
}
Во-вторых, метод printList попадает в бесконечное число l oop, поскольку перемещение не передается следующему узлу
// in printList method add move = move.next inside the while loop as below
public void printList(Node move) {
while (move != null) {
System.out.print(move.data + "->");
move = move.next; // ADD THIS LINE TO AVOID INFINTE LOOP
}
}
Указанные выше изменения должны разрешиться и распечатать список.
Один вопрос, с текущим кодом связанный список действует как стек значений, так как новое значение всегда вставляется перед заголовком. поэтому метод printList будет печатать значения в обратном порядке вставленных значений.
Правильный способ метода insertNode, если целью является стек, будет
public void insertNode(int value) {
Node temp = new Node(value);
if (this.head == null) {
this.head = temp;
} else {
temp.next = this.head;
this.head = temp;
}
}
Если целью LinkedList не является как стек, но чтобы хранить значения в том же порядке, в котором они были добавлены, метод insertNode должен быть таким, как показано ниже
public void insertNode(int value) {
Node temp = new Node(value);
if (this.head == null) {
this.head = temp;
} else {
Node par = this.head;
while (par.next != null) {
par = par.next;
}
par.next = temp;
}
}
В методе main нет необходимости всегда передавать list.head, так как метод insertNode может доступ к головке напрямую, как показано ниже.
list.insertNode(1);
list.insertNode(2);
list.insertNode(3);