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

添加元素到双链接列表

欧博简
2023-03-14

我正在尝试使用时循环将元素添加到双向链表中。节点正在制作中,但它们都存储相同的单词,这是我正在阅读的文件的最后一个单词。这是我的时循环:

while(fscanf(text, "%s", word) == 1)
{
    struct node *temp;
    temp = new_node(word); //Creates a new node
    temp->prev = cursor; //Cursor represents current position in linked list
    temp->next = NULL;
    cursor->next = temp;
    cursor = temp;
}

在while循环开始之前,光标被初始化为列表的开头。

这是我的节点结构:

struct node
{
    struct node* prev;
    struct word_entry* data;
    struct node* next;
};

我的时循环出了什么问题?为什么它总是覆盖以前的节点?请并谢谢你!

共有1个答案

郭兴平
2023-03-14

您的文件位于text中,您正在将单词加载到名为word的字符数组中。

由于循环将所有节点分配给同一个数组,temp=new_节点(word) 所有节点都指向同一个字符数组。

当您将文件中的最后一个单词读入word时,由于所有节点都指向它,因此它们都读出相同的单词。

您必须为每个节点分配单独的字存储,并在分配给节点时将字复制到该存储:

nodeword = malloc(strlen(word) + 1);
if(nodeword) {
  strcpy(nodeword, word);
  nodeword[strlen(word)] = 0;
  temp = new_node(nodeword);
}
else {
  break;
}

或者strdup()如果你愿意的话。。

 类似资料:
  • 问题内容: 无论如何,有没有要监听元素的onload事件? F.ex: 这适用于元素,但不适用于。还有另一种方法吗?我只需要知道外部样式表中的样式何时应用于DOM。 更新: 将隐藏物添加到头部,然后在iframe中监听事件是否是一个主意?它应在加载CSS时触发,但可能无法保证它已在顶部窗口中加载… 问题答案: 这是一种hack,但是如果您可以编辑CSS,则可以添加一种特殊的样式(没有可见的效果),

  • 我在课堂上有一个关于Java的作业。它是关于雇员的,所以有三个类,雇员,雇员列表和节点。我需要用这个做一个双链接列表。链表是我们定制的类,而不是Java提供的类。 现在我被困在添加(雇员)方法中。该方法输入参数一个雇员对象,并被要求添加到列表的末尾。 这是密码 简单地说,当列表为空时,该方法会将员工完美地添加到节点中,即使我将第二个员工添加到列表中,也没有问题;但当我再添加,并尝试检索它时,我最终

  • 我正在尝试为一个项目创建一个双链接列表容器。我不能使用任何std容器。必须对双链接列表进行排序。以下是我目前的代码: 我遇到的问题是在我的插入函数中。我正在使用调试器,并在以下行插入代码:list.insert(10);。 它正确地进入第一种情况,即head==nullptr并创建节点。当我进入下一行代码(list.insert(20))时,它会用这一行创建一个节点:node*node=newno

  • 主要内容:Python append()方法添加元素,Python extend()方法添加元素,Python insert()方法插入元素实际开发中,经常需要对 Python 列表进行更新,包括向列表中添加元素、修改表中元素以及删除元素。本节先来学习如何向列表中添加元素。 《 Python序列》一节告诉我们,使用 运算符可以将多个序列连接起来;列表是序列的一种,所以也可以使用 进行连接,这样就相当于在第一个列表的末尾添加了另一个列表。 请看下面的演示: 运行结果: language = ['P

  • lpush key string 在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型。注意:江湖规矩一般从左端Push,右端Pop,即LPush/RPop。 lpushx 也是将一个或者多个value插入到key列表的表头,但是如果key不存在,那么就什么都不在,返回一个false【rpushx也是同样】 rpush key string 同上,在尾部添加