Каждый узел в моем связанном списке содержит окончательное значение - как это исправить? - PullRequest
0 голосов
/ 04 марта 2019

Я Нуб, пытаюсь прочитать в файле словаря, который содержит одно слово в строке, то есть один \ n два \ n три \ n, и вставить элементы по порядку в связанный список.Я считаю, что мой код работает иначе, но сейчас он выводит три, три, три (вместо одного, двух, трех).Теперь я считаю, что моя ошибка в моей функции печати, поэтому мне нужно выяснить, как пройти по связанному списку и распечатать различные значения узлов.
// код изменен с https://www.geeksforgeeks.org/linked-list-set-2-inserting-a-node/

#include <stdio.h> 
#include <stdlib.h> 

// A linked list node 
struct Node 
{ 
    const char *data; 
    struct Node *next; 
}; 

/* Given a reference (pointer to pointer) to the head 
of a list and an int, appends a new node at the end  */
void append(struct Node** head_ref, const char *new_data) 
{ 
    /* 1. allocate node */
    struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); 

    struct Node *last = *head_ref;  /* used in step 5*/

    /* 2. put in the data  */
    new_node->data  = new_data; 

    /* 3. This new node is going to be the last node, so make next of 
        it as NULL*/
    new_node->next = NULL; 

    /* 4. If the Linked List is empty, then make the new node as head */
    if (*head_ref == NULL) 
    { 
       *head_ref = new_node; 
       return; 
    } 

    /* 5. Else traverse till the last node */
    while (last->next != NULL) 
        last = last->next; 

    /* 6. Change the next of last node */
    last->next = new_node; 
    return; 
} 

// This function prints contents of linked list starting from head 
void printList(struct Node *node) 
{ 
    while (node != NULL) 
    { 
        printf("%s\n", node->data); 
        node = node->next; 
    } 
} 

/* Driver program to test above functions*/
int main() 
{ 
    // set up a file point to File to be opened
    FILE* fp;
    // holds contents of each line/word - as 1 word per line in dictionary per specs
    char buffer[255]; 

    fp = fopen("Xs.txt", "r");
    if (fp == NULL)
    {
        fprintf(stderr, "Could not open infile"); 
        return 2;
    }

    /* create an empty list */
    struct Node* head = NULL; 

    while(fgets(buffer, 255, (FILE*) fp)){
        //printf("%s", buffer);
        append(&head, buffer);
    }

    printList(head);
    fclose(fp);
    return 0; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...