在链表插入中,当插入位置i=1时为何程序运行的结果不像是插入的数据,求指教,谢谢
代码如下:#include "stdio.h"
#include "stdlib.h"
struct node
{
int NO;
int score;
struct node *next;
};
struct node *creat()
{
struct node *p,*listp,*listhead;
int i;
for(i=1;i<4;i++)
{
p=(struct node *)malloc(sizeof(struct node));
if(i==1)
listhead=p;
else
listp->next=p;
listp=p;
listp->next=NULL;
printf("请输入第%d个同学的学号和成绩:",i);
scanf("%d %d",&p->NO,&p->score);
}
return listhead;
}
void print(struct node *listhead)
{
struct node *p;
if(listhead==NULL)
{
printf("链表为空");
return ;
}
p=listhead;
while(p!=NULL)
{
printf("%d %d\n",p->NO,p->score);
p=p->next;
}
}
struct node *insert(struct node *listhead)
{
struct node *p,*listp;
int i,x,y;
printf("请输入要插入的位置和数据:");
scanf("%d %d %d",&i,&x,&y);
if(listhead==NULL)
{
printf("链表还没有建立!\n");
return listhead;
}
int k=1;
listp=listhead;
while(listp!=NULL&&k<i-1)
{
listp=listp->next;
k++;
}
if(k<i-1||i<1)
printf("插入位置必须大于零小于%d\n",k+1);
else if(i==1)
{
if((p=(struct node *)malloc(sizeof(struct node)))==NULL)
{
printf("内存分配错误!\n");
exit(0);
}
p->NO=x;
p->score=y;
p->next=listhead;
listhead=p;
}
else
{
if((p=(struct node *)malloc(sizeof(struct node)))==NULL)
{
printf("内存分配错误!\n");
exit(0);
}
p->NO=x;
p->score=y;
p->next=listp->next;
listp->next=p;
}
return listhead;
}
int main()
{
struct node *listhead;
listhead=creat();
insert(listhead);
print(listhead);
}