在单链表的开头插入节点
Inserting node at beginning of singly linked list
我的 add_to_list
功能有问题。
我正在使用此函数将节点添加到列表指针引用的单链表的开头。
问题是:只添加了第一个节点,如果我再添加,我就失去了列表的踪迹。
#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node* next;
};
struct node *add_to_list(struct node *list , int n){
struct node *new_node ;
new_node = malloc( sizeof(struct node) ); //create new node
if(new_node == NULL){
printf("Error ,malloc failed to allocate memory\n");
exit(EXIT_FAILURE);
}
new_node->value = n; //initiate value field
new_node->next = list;
return new_node;
}
int main(){
struct node * first = NULL;
struct node * temp = first;
first = add_to_list(first,10);
if(first != NULL)
printf("node added\n");
else
printf("add failed\n");
first = add_to_list(first,20);
if(first == NULL)
printf("node added\n");
else
printf("add failed\n");
first = add_to_list(first,30);
if(first == NULL)
printf("node added\n");
else
printf("add failed\n");
while(temp!=NULL){
printf("%d-->",(temp->value));
temp = temp ->next;
}
return 0;
}
所以在 main
的开头你有这两行...
struct node * first = NULL;
struct node * temp = first;
...将NULL
分配给first
,然后将first
的值分配给temp
,这意味着它们都是NULL
。这是一次性作业 - temp
不会随着 first
的变化而更新。
当你到达函数的底部时,你有这个循环,但是自从第一次分配 NULL
.
以来,没有任何更新 temp
的值
while(temp!=NULL){
printf("%d-->",(temp->value));
temp = temp ->next;
}
解决方案是在循环之前将 first
的当前值分配给 temp
,如下所示:
temp = first;
while(temp!=NULL){
printf("%d-->",(temp->value));
temp = temp ->next;
}
我的 add_to_list
功能有问题。
我正在使用此函数将节点添加到列表指针引用的单链表的开头。
问题是:只添加了第一个节点,如果我再添加,我就失去了列表的踪迹。
#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node* next;
};
struct node *add_to_list(struct node *list , int n){
struct node *new_node ;
new_node = malloc( sizeof(struct node) ); //create new node
if(new_node == NULL){
printf("Error ,malloc failed to allocate memory\n");
exit(EXIT_FAILURE);
}
new_node->value = n; //initiate value field
new_node->next = list;
return new_node;
}
int main(){
struct node * first = NULL;
struct node * temp = first;
first = add_to_list(first,10);
if(first != NULL)
printf("node added\n");
else
printf("add failed\n");
first = add_to_list(first,20);
if(first == NULL)
printf("node added\n");
else
printf("add failed\n");
first = add_to_list(first,30);
if(first == NULL)
printf("node added\n");
else
printf("add failed\n");
while(temp!=NULL){
printf("%d-->",(temp->value));
temp = temp ->next;
}
return 0;
}
所以在 main
的开头你有这两行...
struct node * first = NULL;
struct node * temp = first;
...将NULL
分配给first
,然后将first
的值分配给temp
,这意味着它们都是NULL
。这是一次性作业 - temp
不会随着 first
的变化而更新。
当你到达函数的底部时,你有这个循环,但是自从第一次分配 NULL
.
temp
的值
while(temp!=NULL){
printf("%d-->",(temp->value));
temp = temp ->next;
}
解决方案是在循环之前将 first
的当前值分配给 temp
,如下所示:
temp = first;
while(temp!=NULL){
printf("%d-->",(temp->value));
temp = temp ->next;
}