实现了链表构造函数以将值填充到特定大小



我有一个链表类和一个节点类,我想写一个构造函数,用大小为'n'的相同节点填充链表。然而,我似乎无法正确地表述这个逻辑。我现在的位置:

我有字段"head"来表示链接列表的头。

"node"类有一个字段来表示下一个值(考虑:node.next(。

public LinkedList(int size, Object value)
{
int index = 0;
head = value; //setting first node to value
Object workingReference = head; //creating a working reference to iterate through the list
for(index = 0; index < size - 1; index++)
{
workingReference.next = value; //setting the next node to the given value
workingReference = workingReference.next; //setting the "index" to the next "index"
}
}

问题是,当循环遇到约束时,从来没有"null"值,因此下一个节点总是给定的"值",使列表"无限"。我曾经尝试过将value.next设置为null,但出于某种原因,这将head.next设置成了null。我觉得解决方案就在我面前,但我没有以正确的方式思考。谢谢你抽出时间。

首先,将valueworkingReference的类型更改为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;         
}
}

现在,每个节点都是新的,而不是创建了一个循环。head指向initialNode,并且其next(以及用于size迭代的所有nexts(都指向该initialNodevalue字段。

如果您希望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;         
}
}

相关内容

  • 没有找到相关文章

最新更新