неожиданные результаты при создании связанного списка в C

МОЯ функция для создания связанного списка была

 void create(node *list)
 {
    fscanf(fp,"%d\t",&list->number);
      if(list->number==0)
           {
                list=NULL;
           }
     else
           {
           list->next=(node *)malloc(sizeof(node));
           create(list->next);
           }
            return;

      }

INPUT в моем текстовом файле был похож на

1 37 79 164 155 32 87 39 113 15 18 78 175 140 200 0

2 4 160 97 191 100 91 20 69 198 196 0

Теперь, когда я пытаюсь получить доступ к 0 через head-> next-> next.....-> число, даже если я назначил нулевой указатель в операторе if, когда ввод равен 0, вывод отображается как 0

Также я попытался изменить оператор if на free (list); теперь я могу получить доступ к элементам в следующей строке, просто добавив больше (следующий->) ч / б заголовок и номер

 struct linked_list  //structure of node
        {
       int number;
       struct linked_list *next;
        };

Пожалуйста, объясните мне, почему программа ведет себя так


person sarat    schedule 06.06.2014    source источник


Ответы (1)


Здесь:

list = NULL;

Вы присваиваете NULL локальному указателю list, но реальный указатель не меняется.

Вы можете манипулировать только данными, на которые ссылается указатель. Если вы хотите изменить указатель, вы должны передать указатель на указатель в качестве параметра функции. Но я предлагаю вам переписать вашу функцию следующим образом:

node* inputNode()
{
    int number = 0;
    fscanf(fp, "%d\t", &number);

    node* n = NULL;

    if(number != 0)
    {
        node = (node *)malloc(sizeof(node));
        node->number = number;
        node->next = NULL;
    }

    return node;
}


node* createList()
{
    node* root = inputNode();
    node* curr = root;

    while(curr != NULL)
    {
        curr->next = inputNode();
        curr = curr->next;
    }

    return root;
}
person awesoon    schedule 06.06.2014