当前位置: 首页 > 知识库问答 >
问题:

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

冯星剑
2023-03-14

我有一个链表类和一个节点类,我想写一个构造函数,它将用相同的节点填充链表,直到大小为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设置为空,但出于某种原因,head.next设置为空。我觉得解决方案就在我面前,但我没有以正确的方式思考。谢谢你的时间。

共有1个答案

湛鸿
2023-03-14

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

现在,每个节点都是新的,而不是创建循环指向初始节点,其下一个(以及大小迭代的所有下一个都指向该初始节点字段。

如果希望值对象是传递给方法的对象,请执行以下操作:

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;         
    }
}

 类似资料:
  • 我正在尝试实现一个链表。 列表有私有变量*头,*尾,计数。 我理解数据结构中的逻辑,但不可否认,我是C语言的新手,所以我觉得我可能没有正确地使用构造函数。 *head和*tail是列表节点指针。然后,列表节点具有指向上一个和下一个(双链接列表)的指针。 以下是我尝试过的: 我的程序可以编译,但当它试图使用此构造函数创建新列表时崩溃。有什么建议吗?

  • 问题内容: 从问题的答案如何对varchar []使用array_agg() , 我们可以创建一个自定义的聚合函数来聚合Postgres中的n维数组,例如: 一个约束是值必须共享 相同的数组范围和相同的长度 ,处理空值和不同的长度是行不通的。 从答案: 没有办法解决,数组类型不允许在Postgres中出现这种不匹配的情况。您可以使用NULL值填充数组,以便所有维都具有匹配范围。 我有像这样的行 我

  • 我正在为我的网站写一个聊天页面。我已经成功地设法向用户询问他们的名字,简单地说欢迎“username”。问题是,我还希望在聊天本身的名称输入框中使用相同的名称,而不是用户每次希望写消息时都必须输入自己的名称。我使用了onclick=来提示用户输入他们的名字,但我无法让它在名称框中显示该名字。 编辑:我发现,虽然javascript代码submit.php,但submit.php根本不显示:/

  • 问题内容: 我如何使用该字段注入包含Map的属性文件,以用作其他构造函数arg。 从属性文件加载地图 该bean当前使用以下命令进行设置: 相当于Java: 谢谢 问题答案: 像这样: 这利用了使用任意静态工厂方法创建bean的能力,在这种情况下,使用工厂工厂方法来创建bean,然后将其注入到的适当构造函数中。

  • 编辑:我才明白问题到底出在哪里。我需要构造函数从超类获取信息。因此,我需要像这样扩展类中的超类: 如果取消对extends favoriten部分的注释,它将加载构造函数和initialize方法。

  • 问题内容: 有人可以说明一下可能有用的场景类型吗? 这是一种好的编程习惯吗? 问题答案: 这绝对是个好习惯,主要有两个原因: 避免代码重复 实施良好的封装