C Append节点返回NULL appending fist元素
当链接列表为空时,将节点附加到链接列表时遇到问题。总的来说,它总是打印零。我该如何解决这个问题。下面是我对链表节点的实现,以及创建节点和附加节点函数C Append节点返回NULL appending fist元素,c,linked-list,C,Linked List,当链接列表为空时,将节点附加到链接列表时遇到问题。总的来说,它总是打印零。我该如何解决这个问题。下面是我对链表节点的实现,以及创建节点和附加节点函数 struct LL_node { int data; struct LL_node* next; }; typedef struct LL_node LL_node_t; LL_node_t* create_node(int x){ LL_node_t* node = (LL_node_t*)malloc(sizeof
struct LL_node {
int data;
struct LL_node* next;
};
typedef struct LL_node LL_node_t;
LL_node_t* create_node(int x){
LL_node_t* node = (LL_node_t*)malloc(sizeof(LL_node_t)) ;
node->data = x;
node->next = NULL;
return node;
}
void append_node(LL_node_t* start,int x){
LL_node_t* node = create_node(x);
if(start == NULL){
start = node;
return;
}
LL_node_t* nodes = start;
while(nodes->next != NULL){
nodes = nodes->next;
}
node->next = create_node(x);
}
int main(void) {
LL_node_t* head = create_node(5);
LL_node_t* nodes = NULL;
append_node(nodes,3);
printf("%p\n",nodes);
return 0;
}
C严格地按值调用。当您将
节点
传递到附加节点
时,在函数内部将有一个指针值的副本。修改后的值将不会传递回调用方
您有两个选择:
main
)或append\u节点
)中的指针LL_node_t* append_node(LL_node_t* start,int x){
LL_node_t* node = create_node(x);
if(start == NULL){
start = node;
return start;
}
LL_node_t* nodes = start;
while(nodes->next != NULL){
nodes = nodes->next;
}
node->next = create_node(x);
return start;
}
int main(void) {
LL_node_t* head = create_node(5);
LL_node_t* nodes = NULL;
nodes = append_node(nodes,3);
printf("%p\n",nodes);
return 0;
}
第二种变体:
void append_node(LL_node_t** start,int x){
/* avoid dereferencing NULL pointer */
if(start == NULL) {
return;
}
LL_node_t* node = create_node(x);
if(*start == NULL){
*start = node;
return;
}
LL_node_t* nodes = *start;
while(nodes->next != NULL){
nodes = nodes->next;
}
node->next = create_node(x);
}
int main(void) {
LL_node_t* head = create_node(5);
LL_node_t* nodes = NULL;
append_node(&nodes,3);
printf("%p\n",nodes);
return 0;
}
您想用
printf(“%p\n”,节点)打印什么
?void append\u node(LL\u node\u t*start,int x)
这将按值传递start
指针<代码>开始=节点代码>这将修改作为参数接收的指针副本。它不会也不能修改main
中原始指针节点的值。