Основная проблема связана с функцией вставки. Java будет передавать параметр по значению, что означает, что если вы измените то, на что указывает переменная в функции, вы не измените то, на что она указывает, за пределами функции.
Node head1, head2;
public void insert(Node head, int data) {
Node newNode = new Node(data);
Node temp = head;
head = newNode; // This is changing what the parameter points to!
// Not what the class member points to
newNode.next = temp;
}
Вы говорите, что хотите 2 головы в вашем связанном списке. Я не думаю, что вам это нужно (2 отдельных связанных списка будут работать), но для этого вы можете использовать массив Node
объектов. Это также позволит вам изменить объекты головы в функции:
Node [] heads = new Node[2];
// The head parameter is the index in the heads array
public void insert(int head, int data) {
Node newNode = new Node(data);
newNode.next = heads[head];
heads[head] = newNode; // Works since we are not modifying what the heads member var points to.
// Just modifying it's contents
}
Лично я бы просто использовал один объект головы. Тогда вам не нужно передавать его в качестве параметра:
Node head;
public void insert(int data) {
Node newNode = new Node(data);
newNode.next = head;
head = newNode;
}
Если вам нужно 2 списка, создайте 2 LinkedList
объектов.
Существует также ошибка в функции display
, которая будет отображаться, если head
равен null
. Так что вы должны проверить это.