Для начала измените тип value
и workingReference
на Node
вместо Object
, чтобы помочь всем понять.
Ваша главная проблема в том, что вы не копируете value
когда вы его назначаете. Вероятно, вам нужно значение переменной value
, поэтому здесь очень полезно назвать ее Node
вместо Object
.
public LinkedList(int size, Node value)
{
int index = 0;
head = value;
Node workingReference = head;
for(index = 0; index < size - 1; index++)
{
// Here, workingReference, head and value are all the same thing
// So when you set workingReference.next = value,
// You've created a loop (value.next points to value)
workingReference.next = value;
workingReference = workingReference.next;
}
}
То, что вы хотите сделать, - это создать новую узел каждый раз, с содержимым узла value
. Давайте переименуем value
в initialNode
, чтобы было понятнее, как работает исправление:
public LinkedList(int size, Node initialNode)
{
int index = 0;
head = initialNode;
Node workingReference = head;
for(index = 0; index < size - 1; index++)
{
Node newNode = new Node(initialNode.value);
workingReference.next = newNode;
workingReference = workingReference.next;
}
}
Теперь, вместо создания al oop, каждый узел является новым. head
указывает на initialNode
, а next
(и все next
s для size
итераций) все указывают на поле value
этого initialNode
.
Если вы чтобы значение Object было передано методу, сделайте это следующим образом:
public LinkedList(int size, Object initialValue)
{
int index = 0;
head = new Node(initialValue);
Node workingReference = head;
for(index = 0; index < size - 1; index++)
{
Node newNode = new Node(initialValue);
workingReference.next = newNode;
workingReference = workingReference.next;
}
}