В настоящее время я пытаюсь создать связанный список, однако по какой-то причине мои данные указателя головы продолжают перезаписываться.У меня есть следующий метод, который должен обрабатывать вставки в таблицу и записывать частоту любого слова, с которым я столкнулся.Если слово уже было просмотрено, обновите его частоту, в противном случае добавьте слово в конец списка с частотой 1. Предполагается, что оператор print в начале метода должен печатать слово, сохраненное в первом значении.,Текст, который я использую для проверки списка, - 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;
}