我试图让我的链表工作在最简单的层面。我想在我定义的链表(wordList)中添加一个新节点(变量wordNode)。在我的主C文件中,我创建了一个新列表(createWordList),并使用inputLine中的单词“Hello”向其添加了一个节点。
问题在于,当我尝试打印列表头部的单词时,会打印对输入行所做的任何更改。例如,此处不打印“Hello” ,“Go”打印出来。我无法理解这是如何可能的,因为输入行完全取消了与哈希表的链接; “Go”这个词不应该影响哈希表中的值吗?下面是主要功能的代码。
struct wordList* hashTable;
hashTable = createWordList();
char inputLine [20];
// set input line to Hello
strcpy (inputLine, "Hello");
// add Hello as the head node to the linked list
addWordNode (hashTable, inputLine);
// set input line to Go
strcpy (inputLine, "Go");
// print the head of the list. this is currently printing Go, instead of Hello.
if (hashTable->head != NULL) {
printf ("%s\n", i, hashTable->head->word);
}
以下是createWordList()函数的代码:
struct wordList* createWordList() {
struct wordList* list = malloc(sizeof(struct wordList));
list->head = NULL;
return list;
}
对于addWordNode()函数:
void addWordNode(struct wordList *list, char * word) {
struct wordNode* currentNode;
struct wordNode* newNode = malloc (sizeof(struct wordNode));
newNode -> word = word;
newNode -> docFrequency = 1;
newNode -> next = NULL;
// I've only included the first case, because that is what is setting the head value.
if (list->head == NULL) {
list->head = newNode;
return;
}
我很遗憾要求直接调试,但我已经在这几个小时了。是否有更大的字符串或字符串操作行为,我不明白?或者那里有一个简单的错误?
答案 0 :(得分:0)
“因为输入行完全取消了与哈希表的链接”?恰恰相反,在您的addWordNode
函数中,您将新节点直接链接到本地inputLine
数组,指向您从外部传递给addWordNode
函数的指针。这种“脱钩”是你忘记做的事情。
- ANT