связанный список без вставки новых значений «язык C»

#arrays #c #pointers #struct #linked-list

Вопрос:

Я сталкиваюсь с проблемой, когда мой связанный список не добавляет новые значения, которые я ему даю. это приводит к ошибке сегментации, но я не знаю, как это исправить

Текущий Код

 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-gt;value = n;  new_node-gt;next = *list;  //return new_node;  } void print_list(NODE *list){  printf("n=========n");  for (;list;list=list-gt;next){  printf("%dt",list-gt;value);  }  printf("n=========n");  }  int main() {  NODE *first=NULL;    print_list(first);  add(amp;first,10);  add(amp;first,30);  add(amp;first,20);  add(amp;first,40);  add(amp;first,30);  print_list(first);  }  

Обновить

Я добавил в main, но теперь вместо ошибки сегментации ничего не печатается…

 add(amp;first, number)  

Ошибка возникает в функции добавления, более конкретно в этой строке «new_node-gt;следующий = *список;»

Я пытался разыменовать и многое другое, но безрезультатно.

Комментарии:

1. У вас есть NODE *first=NULL; в качестве первой строки, если ваша программа. Как first и пустой список. Когда вы ожидаете, что это изменится? Укажите строку в своем коде, которая присваивает что first -то или иным образом изменяет это.

2. таким образом, функция добавления предназначена для внесения дополнений в список (сначала)

3. Какая строка в функции добавления?

4. его в главном добавлении(amp;во-первых,10) — это первое, что он добавляет

5. оооо… я только что понял это

Ответ №1:

Узел не вставляется, потому что вы не обновляете указатель заголовка: добавьте этот оператор в конце add() функции:

 *list = new_node;  

Комментарии:

1. да, да, спасибо! я устал и не понял, что забыл отразить новые значения в массиве!

Ответ №2:

внесите изменения в разыменованный список

 (*list) = new_node;  

для того, чтобы добавить значения new_node в список.