Отказ от ответственности :Это домашнее задание. Как должно быть очевидно, я пытаюсь решить это сам. Кажется, я столкнулся с проблемой, которую не могу понять, поэтому помощь будет оценена по достоинству.
Мне нужно хэшировать набор слов и вставить его в массив связанных списков. Итак, если 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;
}
Кажется, я перезаписываю свой связанный список в какой-то момент, но не могу понять, где.