如何将链接列表的头指针传递给函数?我写了2个程序,最后在一个链表中插入10个元素。其中一个运行成功,另一个运行失败。我可以用我的第二个代码找出问题,但是我找不到解决方案。下面是我的代码和它们的输出。
代码1(成功)-
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int item;
struct node *next;
}snode;
void main()
{
system("clear");
snode *head,*p,*new,*last;
int i;
last=(snode *)malloc(sizeof(snode));
head=(snode *)malloc(sizeof(snode));
head->next=NULL;
last->next=NULL;
printf("Enter 10 numbers to be inserted at the endn");
for(i=0;i<=9;i++)
{
new=(snode *)malloc(sizeof(snode));
scanf("%d",&new->item);
if(i==0)
{
head=last=new;
}
else
{
last->next=new;
new->next=NULL;
last=new;
}
}
p=head;
printf("Items in the link list are: ");
while(p!=NULL)
{
printf("%d->",p->item);
p=p->next;
}
printf("NULLn");
}
输出——Enter 10 numbers to be inserted at the end
0 1 2 3 4 5 6 7 8 9
Items in the link list are: 0->1->2->3->4->5->6->7->8->9->NULL
代码2(失败)-插入函数所做的更改没有反映在main()
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int item;
struct node *next;
}snode;
void insert(snode *,snode *);
void main()
{
system("clear");
snode *head,*p,*last;
int i;
last=(snode *)malloc(sizeof(snode));
head=(snode *)malloc(sizeof(snode));
(head)->next=NULL;
(last)->next=NULL;
insert(head,last);
p=head;
printf("Items in the link list are: ");
while(p!=NULL)
{
printf("%d->",p->item);
p=p->next;
}
printf("NULLn");
}
void insert(snode *head,snode *last)
{
int i;
snode *new;
printf("Enter 10 numbers to be inserted at the endn");
for(i=0;i<=9;i++)
{
new=(snode *)malloc(sizeof(snode));
scanf("%d",&new->item);
if(i==0)
{
head=last=new;
}
else
{
(last)->next=new;
new->next=NULL;
last=new;
}
}
}
输出——Enter 10 numbers to be inserted at the end
0 1 2 3 4 5 6 7 8 9
Items in the link list are: 0->NULL
我知道我应该使用引用调用方法。但是我无法理解我在哪里使用*
运算符和&
运算符。
你的函数insert
通过值获得指针,所以当它修改头时,它修改指针的本地副本。insert
不改变您在main
中定义的head
变量。
你需要把insert
改成通过引用来获取指针:
void insert(snode **head, snode **last);
然后在main中传递指针的地址:
insert(&head, &last);
看你的代码,我看到你初始化头和最后malloc-ed结构。你确定你想这样吗?对于空列表,通常设置head=last=NULL。
顺便说一句,您应该使用高警告级别进行编译。这有助于您识别错误。