C 插入到链表的开头(重新访问)

C 插入到链表的开头(重新访问),c,pointers,linked-list,printf,insertion,C,Pointers,Linked List,Printf,Insertion,我对C语言的编码非常陌生(因此我正在做一个愚蠢的练习)。我试着用一个类似的问题来看待这个问题,但似乎我的编码策略不同,最终我想了解我的代码有什么问题。我将非常感谢你的意见 我有一个链表,一个在列表开头插入新节点的函数,一个打印链表的函数,还有一个main函数 不幸的是,我的C语言知识还不足以理解为什么我的函数没有插入列表的开头。更不幸的是,这段代码没有崩溃 #include <stdio.h> #include <stdlib.h> typedef struct Nod

我对C语言的编码非常陌生(因此我正在做一个愚蠢的练习)。我试着用一个类似的问题来看待这个问题,但似乎我的编码策略不同,最终我想了解我的代码有什么问题。我将非常感谢你的意见

我有一个链表,一个在列表开头插入新节点的函数,一个打印链表的函数,还有一个main函数

不幸的是,我的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);

}

add\u to\u list()
函数中有一个错误:

if ((*list)->next == NULL) { // checks next of first is NULL not list is NULL
 // to insert at first 
应该是:

if ((*list) == NULL){ // You need to check list is NULL
检查


为什么只获取最后一个节点(
temp3
)值


因为您主要创建了三个临时节点,并将每个节点的下一个初始化为NULL,包括
list
节点,所以在
add_to_list()
函数中,如果条件
((*list)->next==NULL)
始终计算为true,并且
list
始终使用临时节点初始化

将\u添加到\u列表()中有一个错误。
函数:

if ((*list)->next == NULL) { // checks next of first is NULL not list is NULL
 // to insert at first 
应该是:

if ((*list) == NULL){ // You need to check list is NULL
检查


为什么只获取最后一个节点(
temp3
)值

因为您主要创建了三个临时节点,并将每个节点的下一个初始化为NULL,包括
list
节点,所以在
add_to_list()
函数中,如果条件
((*list)->next==NULL)
始终计算为true,并且
list
始终使用临时节点初始化