2012-12-01 82 views
0

我在自學關於鏈接列表並提出了一個基本問題來解決。我想逐行閱讀一個文本文件,該文件將包含名稱並將每個名稱添加到我的鏈接列表中。從文本文件創建鏈接列表

的文本文件的一個例子是:

John 
Jacob 
Jingleheimer 
Smith 

我有麻煩搞清楚如何動態地添加到我的提議鏈表。這是我到目前爲止。

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



int main(void) 
{ 
    struct node { 
     char *name; 
     struct node* next; 
    }; 


    static const char* fileName = "test.txt"; 
    FILE *fp = fopen(fileName,"r"); 
    char *line = NULL; 
    size_t len = 0; 
    ssize_t read; 

    struct node* head = NULL; // first node 

    if (fp == NULL) 
     exit(EXIT_FAILURE); 

    while ((read = getline(&line, &len, fp)) != -1) 
    { 
     //add line of text to linked list 
    } 
    if (line) 
     free(line); 

     exit(EXIT_SUCCESS); 

} 

任何指向正確方向的指針都會有幫助。

回答

3

好,要做到這一點,你需要先分配一個節點條目,然後複製你剛纔讀進去就行了。然後將其添加到列表中。 (我遺漏了錯誤處理,比如malloc返回NULL)。

/* This will store the last read line first */ 
while ((read = getline(&line, &len, fp)) != -1) 
{ 
    struct node *n = malloc(sizeof(*n)); 
    n->name = strdup(line); /* copy the line since it can get reused by getline */ 
    n->next = head; 
    head = n; 
} 
+0

我需要列表插入部分的幫助。 – sdsd

+0

n-> next = head;頭= n; – Gille

+0

這是否與我現有的鏈接列表結構兼容?我收到錯誤 – sdsd

0

分配內存來保存字符串,將該內存=設置爲字符串。 然後

node *next = malloc(sizeof(node)); 
next->name = name; 
next->next = NULL; 
head->next = next; 
head = next; 
+0

因此,我把它放到我的循環中,就是這樣嗎? – sdsd

+0

@Gille謝謝你,忘了我做了一個指針。哈哈 – Avery3R

+0

沒問題,但代碼也會出現段錯誤。第一次通過循環時頭部爲NULL。 – Gille