1

私は C でのコーディングに非常に慣れていません (したがって、私が取り組んでいるばかげた演習です)。同様の質問に対するこの他の解決策を調べてみましたが、コーディング戦略が異なるようで、最終的に自分のコードの問題を理解したいと思います。ご意見をお待ちしております。

リンクされたリスト、リストの先頭に新しいノードを挿入する関数、リンクされたリストを出力する関数、およびメイン関数があります。

残念ながら、私の C の知識は、関数がリストの先頭に挿入されない理由を理解するのに十分ではありません。さらに残念なのは、このコードがクラッシュしないことです。

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

typedef struct Node {
    int data;
    struct Node* next;
} *Node_t;

void print_list(Node_t root) {
    while (root) {
        printf("%d ", root->data);
        root = root->next;
    }
    printf("\n");
}

void add_to_list(Node_t *list, Node_t temp){
    // check if list is empty
    if ((*list)->next == NULL) {
        // insert first element
        (*list) = temp;
    }
    else {
        temp->next = (*list);
        (*list) = temp;
    }
}

int main () {

    int val1 = 4;
    int val2 = 8;
    int val3 = 15;

    Node_t list = malloc(sizeof(struct Node));
    Node_t temp1 = malloc(sizeof(struct Node));
    Node_t temp2 = malloc(sizeof(struct Node));
    Node_t temp3 = malloc(sizeof(struct Node));

    temp1->data = val1;
    temp1->next = NULL;
    temp2->data = val2;
    temp2->next = NULL; 
    temp3->data = val3;
    temp3->next = NULL; 

    //Initialize list with some values
    list->data = 0;
    list->next = NULL;

    /* add values to list */
    add_to_list(&list,temp1);
    add_to_list(&list,temp2);
    add_to_list(&list,temp3);

    print_list(list);

}

このコードは、リストに追加しようとした最後のノードのみを出力するため、以前のノードを上書きします。

例えば:

Running…
15 

Debugger stopped.
Program exited with status value:0.
4

1 に答える 1