C-未创建链接列表,为什么?[CS50 PSET4]



我正在执行CS50的PSET4,基本上需要您创建26个节点(每个字母的每个字母的每个节点(,并在这些节点中创建一个链接的列表来连接字典中的单词。

因此,例如,节点0将存储以a开头的字典中的每个单词,节点1 wills存储以b开始的词典的每个单词,等等。

...

所以,这是代码的主要部分:

   // Insert words into hash table
while (fscanf(file, "%s", word) != EOF)
{
    // for every word, we allocate enough memory for a node, that will carry the word
    node *new_node = malloc(sizeof(node));
    if(new_node == NULL) { printf("could not allocate memory.n"); return false; }
    strcpy(new_node->word, word);
    new_node->next = NULL;
    if(!hashtable[alphabetPosition(word[0])]){
        hashtable[alphabetPosition(word[0])] = new_node;
    }
    else
    {
        for(node *ptr = hashtable[alphabetPosition(word[0])]; ptr != NULL; ptr = ptr->next){
            hashtable[alphabetPosition(word[0])]->next = new_node;
        }
    }
}

alphabetPosition((基本上是一个函数,它将返回单词的第一个字符。

主要问题是:

else
{
    for(node *ptr = hashtable[alphabetPosition(word[0])]; ptr != NULL; ptr = ptr->next){
        hashtable[alphabetPosition(word[0])]->next = new_node;
    }
}

因为其他事情都在起作用。创建了节点,但链接列表却没有。

我很确定这件代码有问题,但我似乎无法理解。如果有人可以帮助我(解释如何解决(,它将对我有很大帮助。

谢谢!

主要缺陷是: hashtable[index]仅,并且总是指向创建的最后一个节点。IE。hashtable[alphabetPosition(word[0])]->next始终设置为new_node

for循环基本上是错误的。该程序只需要将new_node指向列表的当前头(即hashtable[alphabetPosition(word[0]),然后使New_Node成为新头。

相关内容

  • 没有找到相关文章

最新更新