我目前正在尝试创建一个链表,但是,由于某种原因,我的头指针数据一直被覆盖。我有以下方法应该处理表中的插入并记录我遇到的任何单词的频率。如果单词已经出现,则更新它的频率,否则,将单词添加到列表的末尾,频率为 1。方法开头的打印语句应该打印存储在第一个值处的单词.我用来测试列表的文本是 a dog and cat
,但是第一个 print 语句打印出存储在 word
变量中的值,尽管它应该始终是打印出 a
。当我打印整个链表时,我看到的只是输入的最后一个词,或 dog
。我假设它与我遍历列表以查看单词是否存在或是否必须打印的方式有关,但我不知道如何解决这个问题。
typedef struct tableNode{
int freq;
char * word;
struct tableNode *next;
}tableNode;
void insertIntoTable(char* word){
if (tableHead != NULL) printf("%s\n", tableHead -> word);
if (tableHead == NULL){
printf("Null %s\n", word);
tableHead = (tableNode*) malloc(sizeof(tableNode));
tableHead -> word = word;
tableHead -> freq = 1;
tableHead -> next = NULL;
return;
}
tableNode* ptr = tableHead;
while(ptr -> next != NULL){
if (strcmp(ptr -> word, word) == 0){
printf("Dup %s %s\n", ptr -> word, word);
ptr -> freq = (ptr -> freq) + 1;
return;
}
ptr = ptr -> next;
}
if (strcmp(ptr -> word, word) == 0){
printf("Dup %s %s\n", ptr -> word, word);
ptr -> freq = (ptr -> freq) + 1;
return;
}
printf("New %s\n", word);
ptr -> next = (tableNode*) malloc(sizeof(tableNode));
ptr -> next -> word = word;
ptr -> next -> freq = 1;
ptr -> next -> next = NULL;
}
最佳答案
事实证明,这不是我的方法有问题,而是我调用插入方法的方式有问题。我正在发送一个 char*,但是那个 char* 的值一直在变化,每次都有效地改变了头节点的值。我用 strdup
创建了一个副本并发送了那个值,它起作用了。
关于c - LinkedList 头节点不断被覆盖 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447340/