插入元素单链表C

Inserting Element single linked List C

我尝试在一个空的单个链表中插入一个元素并打印它。 代码如下所示。

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

    typedef struct Node{
    int val;
    struct Node* next;
}ll;

void addElement(ll* List, int num){
ll* new = malloc(sizeof(ll));

if(new == NULL){
printf("NO MEMORY\n");
exit(0);
}

new->val = num;
new->next = NULL;

if(List == NULL){
List = new;
return;
}

ll* curr = List;
while(curr->next != NULL){
curr = curr->next;
}
curr->next = new;
}


void printElements(ll* List){

ll* curr = List;

while(curr != NULL){
printf("%i\n", curr->val);
curr = curr->next;
}
}
*int main(){
ll* list = NULL;
addElement(list, 20);
addElement(list, 30);
addElement(list, 19);
printElements(list);

return 0;*
}

有人看到我的错误了吗?因为它只有在我的列表中已经有一个元素并且不会打印任何内容时才有效。

该函数处理指向用作函数参数的头节点的指针值的副本。

void addElement(ll* List, int num){

所以这个声明

List = new;

不改变原指针的值。它改变了原始指针副本的值。

函数可以这样定义

int addElement( ll **List, int num )
{
    ll *new_node = malloc( sizeof( ll ) );
    int success = new_node != NULL;

    if ( success )
    {
        new_node->val = num;
        new_node->next = NULL;

        while ( *List != NULL ) List = &( *List )->next;

        *List = new_node;
    }

    return success;
}

并且该函数被调用为

ll* list = NULL;
addElement( &list, 20);
addElement( &list, 30);
addElement( &list, 19);