1

私は連結リストについて独学しており、解決すべき基本的な問題を提案しました。名前を持つテキスト ファイルを 1 行ずつ読み取り、各名前をリンク リストに追加したいと考えています。

テキスト ファイルの例は次のとおりです。

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);

}

正しい方向へのポインタは役に立ちます。

4

2 に答える 2

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;
}
于 2012-12-01T23:22:46.643 に答える
0

文字列を保持するためにメモリを割り当て、そのメモリ = を文字列に設定します。それで

node *next = malloc(sizeof(node));
next->name = name;
next->next = NULL;
head->next = next;
head = next;
于 2012-12-01T23:22:40.123 に答える