大手们帮我看看链表
在进行删除操作后程序会出错,并且输出是倒序的?...#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int grade;
struct LNode *next;
}LNode, *Linklist;
Linklist Createhead(LNode *head){
head=(Linklist)malloc(sizeof(LNode));
head->next=NULL;
return head;
}
Linklist CreateList_L(int n,LNode *head){
LNode *p;
int gra;
int i;
for(i=n;i>0;i--){
p=(Linklist)malloc(sizeof(LNode));
printf("请依次输成绩");
scanf("%d,%d",&gra);
p->grade=gra;
p->next=head->next;
head->next=p;
}
return head;
}
Linklist ListInsert_L(int a,Linklist head,int m){
LNode *p;
Linklist s;
int j;
p=head;
j=0;
while(p&&j<a-1)
{
p=p->next;
++j;
}
s=(Linklist)malloc(sizeof(Linklist));
s->grade=m;
s->next=p->next;
p->next=s;
return head;
}
Linklist ListDelete_L(int b, Linklist head){
LNode *p,*q;
int j;
p=head;
j=0;
while(p->next&&j<b-1){
p=p->next;
++j;
}
q=p->next;
p->next=q->next;
free(q);
return head;
}
Linklist ListTraverse(Linklist head,int n){
int h;
Linklist p;
p=head;
for(h=0;h<n;h++)
{
p=p->next;
printf("第%d个数据值为%d\n",h+1,p->grade);
}
p=p->next;
if(p==NULL)
printf("输出完毕\n");
return head;
}
void main(){
int n,Y,a,X,b,m;
LNode *head;
head=Createhead(head);
printf("请输入学生总数");
scanf("%d",&n);
head=CreateList_L(n,&*head);
printf("你是否需要插入数据 1.是 2.不是");
scanf("%d",&Y);
if(Y==1){
printf("你需要在第几个前插入数据");
scanf("%d",&a);
printf("请输入要插入的数据");
scanf("%d",&m);
head=ListInsert_L(a,&*head,m);
n++;
}
printf("你是否需要删除数据1.是2.不是");
scanf("%d",&X);
if(X==1){
printf("你需要删除第几个数据");
scanf("%d",&b);
head=ListDelete_L(b,&*head);
}
ListTraverse(&*head,n);
system("pause");
}