Я перезаписываю свой связанный список?

Отказ от ответственности :Это домашнее задание. Как должно быть очевидно, я пытаюсь решить это сам. Кажется, я столкнулся с проблемой, которую не могу понять, поэтому помощь будет оценена по достоинству.

Мне нужно хэшировать набор слов и вставить его в массив связанных списков. Итак, если 3 разных слова имеют хэш 38 в массиве [38], мне нужен связанный список с 3 словами.

Я использую эту структуру

struct Word {
    char* word;
    struct Word* next;
};

После хеширования я вставляю его в массив следующим образом:

struct Word* table[1000];   // array of linked-lists

char word[128];
while(fgets(word, sizeof(word), dict) != NULL) {
    hashValue = hashWord(word, strlen(word));        

    struct Word *newWord = malloc(sizeof(struct Word));
    newWord->word = word;           

    if (table[hashValue] == NULL) {
        table[hashValue] = newWord;             
    } else {   // at index hashValue, table already contains at least one element
        // insert new word as first element of linked-list
        newWord->next = table[hashValue];
        table[hashValue] = newWord;         
    }

}

Я знаю, что есть около 5 слов с хешем 38, но когда я их печатаю, я получаю одно и то же слово 5 раз:

struct Word* foo = table[38];

while (foo->next != NULL) {
    printf("%s", foo->word); // prints the same word every time
    foo = foo->next;
}

Кажется, я перезаписываю свой связанный список в какой-то момент, но не могу понять, где.

0
задан Mat 29 September 2012 в 15:56
поделиться