моя программа для вставки данных в связанный список не работает - PullRequest
0 голосов
/ 21 сентября 2018

Следующий код не работает.Связанный список использует структуру с именем node, которая имеет два поля int data и struct node* next.Я определил два главных узла, struct node* head1 и struct node* head2 глобально.

void insert(struct node* h, int data)  //h is the head node
{
    struct node* temp=(struct node*)malloc(sizeof(struct node));

    temp->data=data;
    temp->next=NULL;

    if(h==NULL)
    {
      h=temp;   
    }
    else
    {
      struct node* ptr=h;

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

      ptr->next=temp;
    }
}

1 Ответ

0 голосов
/ 21 сентября 2018

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

Решение:

Вы можете передать ссылку на оригинальную головку на insert чтобы сохранить изменения, сделанные в insert, как показано ниже.

   void insert(struct node **h, int data)  //h is the head node
    {
         struct node* temp=(struct node*)malloc(sizeof(struct node));
         temp->data=data;
         temp->next=NULL;

         if(*h == NULL)
         {
            *h=temp;
         }
         else
         {
            struct node* ptr = *h;
            while(ptr->next!=NULL)
            {
                ptr=ptr->next;
            }
            ptr->next=temp;
       }
    }

и вы звоните insert, как показано ниже.

struct node *head = NULL;
insert(&head,1);
...