向双向链表添加元素
Adding Elements to doubly-linked lists
我正在尝试使用 while 循环将元素添加到双向链表。正在制作节点,但它们都存储同一个词,这是我正在阅读的文件的最后一个词。这是我的 while 循环:
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;
};
我的 while 循环有什么问题?为什么它不断覆盖以前的节点?请谢谢!
您的文件在 text
中,您正在将单词加载到名为 word
的字符数组中。
由于您的循环将所有节点分配给同一个数组,temp = new_node(word);
所有节点都指向同一个字符数组。
当您将文件中的最后一个词读入 word
时,由于所有节点都指向它,因此它们都读出相同的词。
您必须为每个节点分配单独的单词存储,并在分配给节点时将单词复制到该存储:
nodeword = malloc(strlen(word) + 1);
if(nodeword) {
strcpy(nodeword, word);
nodeword[strlen(word)] = 0;
temp = new_node(nodeword);
}
else {
break;
}
或 strdup() 如果你愿意的话..
我正在尝试使用 while 循环将元素添加到双向链表。正在制作节点,但它们都存储同一个词,这是我正在阅读的文件的最后一个词。这是我的 while 循环:
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;
};
我的 while 循环有什么问题?为什么它不断覆盖以前的节点?请谢谢!
您的文件在 text
中,您正在将单词加载到名为 word
的字符数组中。
由于您的循环将所有节点分配给同一个数组,temp = new_node(word);
所有节点都指向同一个字符数组。
当您将文件中的最后一个词读入 word
时,由于所有节点都指向它,因此它们都读出相同的词。
您必须为每个节点分配单独的单词存储,并在分配给节点时将单词复制到该存储:
nodeword = malloc(strlen(word) + 1);
if(nodeword) {
strcpy(nodeword, word);
nodeword[strlen(word)] = 0;
temp = new_node(nodeword);
}
else {
break;
}
或 strdup() 如果你愿意的话..