链表不插入新值“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语言”的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现链表节点的插入

C语言: 链表查询

c语言链表问题求解,详细的话加分

c语言链表插入问题,pta提交有个段错误,请各位大佬帮忙找找茬,感激!

一个c语言的程序题?

用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩