链表不插入新值“C语言”
Posted
技术标签:
【中文标题】链表不插入新值“C语言”【英文标题】:linked list not inserting new values "C language" 【发布时间】:2022-01-05 13:54:07 【问题描述】:我遇到了一个问题,我的链表没有添加我给它的新值。它导致了分段错误,但我不知道如何修复它
当前代码
typedef struct node
int value;/*data stored in the node */
struct node *next;
/*pointer to the next node*/
NODE;
void add(NODE **list, int n)//add_to_list in slides
NODE *new_node;
new_node = malloc(sizeof(NODE));
if (new_node == NULL)
fprintf(stderr,"Error:malloc failed in add_to_front \n");
exit(EXIT_FAILURE);
new_node->value = n;
new_node->next = *list;
//return new_node;
void print_list(NODE *list)
printf("\n=========\n");
for (;list;list=list->next)
printf("%d\t",list->value);
printf("\n=========\n");
int main()
NODE *first=NULL;
print_list(first);
add(&first,10);
add(&first,30);
add(&first,20);
add(&first,40);
add(&first,30);
print_list(first);
更新
我在 main 中添加,但现在没有打印分段错误...
add(&first, number)
错误发生在 add 函数中,更具体地说是这一行“new_node->next = *list;”
我尝试了取消引用和许多其他操作,但无济于事。
【问题讨论】:
如果您的程序,您将NODE *first=NULL;
作为第一行。所以first
是一个空列表。您预计这种情况何时会改变?指出代码中将某些内容分配给 first
或以其他方式更改它的行。
所以 add 函数是用来添加列表的(第一个)
添加函数中的哪一行?
它在 main add(&first,10) 是它添加的第一件事
ohhhhh...我刚刚明白了
【参考方案1】:
节点没有插入是因为你没有更新头指针:在add()
函数的末尾添加这条语句:
*list = new_node;
【讨论】:
是的,谢谢!我累了,没有意识到我忘记反映数组中的新变化!【参考方案2】:对取消引用的列表进行更改
(*list) = new_node;
为了将 new_node 值添加到列表中。
【讨论】:
以上是关于链表不插入新值“C语言”的主要内容,如果未能解决你的问题,请参考以下文章