以下代码不起作用。链表使用称为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;
}
}
答案 0 :(得分:1)
您的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);