我的程序无法在链表中插入数据

时间:2018-09-21 08:29:02

标签: c singly-linked-list

以下代码不起作用。链表使用称为node的结构,该结构具有两个字段int datastruct node* next。我全局定义了两个头节点struct node* head1struct 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 :(得分:1)

您的hinsert的本地变量,一旦控件退出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);