簡體   English   中英

如何創建鏈表使用從 C 文件中讀取的數據

[英]How to create a linked list use data read from file in C

我是 C 新手,我想讀取一個包含一個整數的數據文件,並將它們添加到一個鏈表中(我在這里很懶,所以沒有將 typedef 放入 .h 文件中,而是將其放入它在我的 .c 文件的頂部)。 鏈表的結構如下:

typedef struct Node{
    int num;
    struct Node *next;
    
}Node;

現在我寫了一些像下面這樣的代碼,.c 文件編譯但不能正確顯示鏈表。 我不知道為什么會發生這種情況,但我猜這與 while 循環條件和 fscanf() 有關?

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

typedef struct Node{
    int num;
    struct Node *next;
    
}Node;

Node* createLinkedlist(FILE* input_file, char* filename1);
void displayList(Node *head);

int main() {
    char *filename1 = "data";
    int number;
    FILE *input_file;

    Node *head = NULL;
    head = createLinkedlist(input_file, filename1);
    displayList(head);
    return(0);
    

}


Node* createLinkedlist(FILE* input_file, char* filename1) {
    Node* head = NULL;
    Node* newNodePtr = NULL;
    Node* p = NULL;


    input_file = fopen(filename1, "r"); /*open input file, read data*/
    if(input_file == NULL) {
        printf("Cannot open %s", filename1);
        exit(EXIT_FAILURE);
    } 
    while(fscanf(input_file, "r") != EOF) { 
        /*Create individual Node*/
        newNodePtr = (Node*)malloc(sizeof(Node));
        if(newNodePtr == NULL){
            printf("The storage was NOT allocated.");
            exit(EXIT_FAILURE);
        } else {
            /*Create signle Node data*/
            fscanf(input_file, "%d\n", &(newNodePtr->num));
        }

        if(head == NULL){
            head = newNodePtr;
        }else {
            p = head;
            while(p->next != NULL) {
                p = p->next;
            }
            p->next = newNodePtr;
        }
        
    }
    return head;
    
}

void displayList(Node* head) {
    Node *p = head;

    while(p != NULL){
        printf("\t%d->", p->num);
        p = p->next;
    }
}

有人可以幫我找出我的問題嗎? 非常感謝,我真的很掙扎...

主要問題是,您沒有將 NULL 值分配給正確的值。 拿到入口后,你必須寫:

newNodePtr->next = NULL;

如果你不這樣做,這將不起作用:

else {
        p = head;
        while(p->next != NULL) {
            p = p->next;
        }
        p->next = newNodePtr;
    }

因為如果您不分配 NULL,您將無法找到 NULL 值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM