我试图在一个空的单个链表中插入一个元素并打印它。代码如下所示。
#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 MEMORYn");
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("%in", 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);