head
- это NULL
для начала. Поэтому, когда вы делаете:
struct node*temp1=head;
while(temp1->link!=NULL)
^^^^^
вы разыменовываете NULL
и программа падает.
Вам нужен дополнительный оператор if
, например, для обработки случая, когда head
равен NULL
.
...
temp->link=NULL;
if (head == NULL)
{
head = temp;
return;
}
struct node*temp1=head;
...
Кстати: вообще плохая идея иметь глобальную переменную head
.
Чтобы избежать глобальной переменной, вы можете сделать две вещи - либо вернуть head
указывать на каждый вызов insert
или передавать адрес head
функции. Я предпочитаю последнее. Это выглядит так:
void insert(struct node** pHead, int x){
struct node* temp=(node*)malloc(sizeof(struct node));
temp->data=x;
temp->link=NULL;
if (*pHead == NULL)
{
*pHead = temp; // Update head
return;
}
struct node* temp1 = *pHead;
while(temp1->link!=NULL)
temp1=temp1->link;
temp1->link=temp;
};
и называется так:
int main()
{
struct node* head=NULL; // Use a local variable
int n,i,x;
printf("Enter the number of elements:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Enter the elements:");
scanf("%d",&x);
insert(&head, x); // Pass the address of head
....
}
}