Невозможно добавить в заголовок связного списка - PullRequest
1 голос
/ 01 мая 2020

У меня есть структура узла LinkedList, определенная так:

struct intnode {
    int item;
    struct intnode *next;
};
typedef struct intnode IntNode;

, которую я использую для простой сортировки. Однако при создании этого связанного списка у меня возникают проблемы с областью действия. В моей основной функции у меня есть объект IntNode заголовка Null, который служит первым элементом в списке, однако я не могу изменить его в своей функции вставки, несмотря на то, что я передаю указатель на него. Код никогда не достигает оператора print, говоря, что список больше не пуст, что меня смущает. Имеет ли это какое-то отношение к определению нового элемента IntNode для добавления в функцию вставки, которая затем выбрасывается после выполнения функции?

int main() {

  IntNode *header = NULL;

  printf("Enter some numbers, ending with -1: ");
  int a;

  while(a != -1) {
    scanf("%d",&a);
    if(a != -1) {
      insert(header, a);
    }
  }
  return 0;
}

IntNode *createNode(int val) {
  IntNode *new_node;
  new_node = malloc(sizeof(IntNode));
  new_node->item = val;
  return new_node;
}

void insert(IntNode *header, int val) {

  IntNode *newNode = createNode(val);

  if(header == NULL) { //list is empty, so insert at front
    printf("list still empty\n");
    newNode->next = header;
    header = newNode;
    printf("%d",header->item);
  } else {
    printf("the list is no longer empty...");
    //do more stuff here
    }
}

1 Ответ

0 голосов
/ 01 мая 2020

Если вы хотите изменить указатель, вам нужно передать указатель этого указателя. Поэтому

insert(header, a);

должно быть

insert (&header, a);

и соответственно настроить вашу функцию insert().

...