今天初学链表,题目是“输入n(n>1)个正整数,每次将输入的整数插入到链表头部。-1表示输入结束。”
我写了如下代码
#include<stdio.h>
struct tmp
{
int i;
struct tmp *next;
};
int main()
{
struct tmp *head=NULL,*p=NULL,*ptr=NULL;
int i=0;
printf("输入-1结束\n");
while(1)
{
printf("请输入数字");
scanf("%d",&i);
if(i==-1)
break;
p->i=i;
p->next=NULL;
if(head==NULL)
{
head=p;
ptr=head;
}
else
{
head->next=p;
head=p;
p->next=NULL;
}
}
while(ptr!=NULL)
{
printf("%d ",ptr->i);
ptr=ptr->next;
}
return 0;
}
发现在运行时出现错误,在输入第一个数字的之后会直接崩溃。
后来发现时没有个p分配空间。
需要在循环中加入p = (struct tmp *)malloc(sizeof(struct tmp));
应该改为
#include<stdio.h>
struct tmp
{
int i;
struct tmp *next;
};
int main()
{
struct tmp *head=NULL,*p=NULL,*ptr=NULL;
int i=0;
printf("输入-1结束\n");
while(1)
{
printf("请输入数字");
scanf("%d",&i);
if(i==-1)
break;
p = (struct tmp *)malloc(sizeof(struct tmp));
p->i=i;
p->next=NULL;
if(head==NULL)
{
head=p;
ptr=head;
}
else
{
head->next=p;
head=p;
p->next=NULL;
}
}
while(ptr!=NULL)
{
printf("%d ",ptr->i);
ptr=ptr->next;
}
return 0;
}
后可正常运行。