我想插入我的链表。以下是我为此写的内容:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
void show_menu()
{
printf("\nWhat do you want to do: \n");
printf("1.Insert \n2.Delete \n3.Show");
printf("\nEnter your choice: \n");
}
void insert(struct node *head)
{
int new_numer;
printf("Enter a number to insert in the linked list: \n");
scanf("%d",&new_numer);
if ( head == NULL )
{
head = (struct node *)malloc(sizeof(struct node));
head->data = new_numer;
head->next = NULL;
}
else
{
struct node *temp = head;
struct node *new_node = (struct node *)malloc(sizeof(struct node));
new_node -> data = new_numer;
new_node -> next = NULL;
while( temp -> next != NULL )
{
temp = temp -> next;
}
temp->next = new_node;
}
}
void show(struct node *head)
{
printf("\n The elements in the list are: \n");
while ( head != NULL )
{
printf("%d\n", head->data);
head = head -> next;
}
}
int main(int argc, char const *argv[])
{
int choice;
struct node *head = NULL;
while(1)
{
show_menu();
scanf("%d",&choice);
switch(choice)
{
case 1:
insert(head);
show(head);
break;
case 2:
show(head);
break;
case 3:
break;
default:
printf("Don't fuck with me.\n");
}
}
return 0;
}
在运行代码时,我得到了:
What do you want to do:
1.Insert
2.Delete
3.Show
Enter your choice:
1
Enter a number to insert in the linked list:
12
The elements in the list are:
What do you want to do:
1.Insert
2.Delete
3.Show
Enter your choice:
为什么列表中没有插入元素?
如果我要搬家
head = (struct node *)malloc(sizeof(struct node));
到main函数,我得到第一个元素为零,其他插入。
我在这里缺少什么?
答案 0 :(得分:2)
您遇到的问题是,当您插入第一个元素时,头部不会改变。您已将其值传递给函数。
您需要做的是传递头部的地址,即struct node** head
,然后修改*head
,如果它是第一个被插入的元素。
答案 1 :(得分:0)
每当您想要更改传递给函数的某个变量的值时,您需要通过引用传递或使用变量的指针。这里的情况也是如此。函数insert
更改变量head
的值,这是一个指针。所以你必须传递指针的指针。
因此,参数必须为struct node **head
,并且main()
函数将&head
传递给insert()
。