单链表插入删除功能实现问题,可以运行但得不到渴望解,求指点
#include<stdio.h>#include<stdlib.h>
typedef int elemtype;
typedef struct Lnode
{elemtype data;
struct Lnode *next;
}Lnode;
typedef struct Lnode * Linklist;
void Initlist(Linklist&l)
{l->next=NULL;
}
void Creatlist(Linklist&l,int n)
{int i;
Linklist q=NULL;
Linklist p=NULL;
p=l;
for(i=1;i<=n;++i)
{q=(Linklist)malloc(sizeof(Lnode));
scanf("%d",&(q->data));
p->next=q;
p=q;
}
p->next=NULL;
}
void Insertlistelem(Linklist&l,int i,elemtype e)
{Linklist q=NULL;
Linklist p=l;
int j;
if(i==1)
{q=(Linklist)malloc(sizeof(Lnode));
scanf("%d",&e);
q->next=p->next;
p->next=q;
}
else
{for(j=1;j<i;++j)
{p=p->next;
}
q=(Linklist)malloc(sizeof(Lnode));
scanf("%d",&e);
q->next=p->next;
p->next=q;
}
}
void Deletelistelem(Linklist &l,int i,elemtype &e)
{Linklist p=l;
Linklist q=NULL;
int j;
if(i==1)
{q=p->next;
p->next=q->next;
e=q->data;
free(q);
}
else
{for(j=1;j<i;++j)
{p=p->next;
}
q=p->next;
p->next=q->next;
e=q->data;
free(q);
}
}
void Travellist(Linklist &l)
{Linklist p=NULL;
p=l;
while(p->next)
{p=p->next;
printf("%3d",p->data);
}
}
void Destorylist(Linklist&l,int n)
{int i;
int j;
Linklist p=NULL;
for(i=n;i>=1;--i)
{p=l;
for(j=1;j<=i;++j)
{p=p->next;
}
free(p);
}
free(l);
}
main()
{elemtype r;
Linklist Head=(Linklist)malloc(sizeof(Lnode));
Initlist(Head);
Creatlist(Head,8);
Travellist(Head);
printf("\n");
Insertlistelem(Head,4,200);
Travellist(Head);
printf("\n");
Deletelistelem(Head,3,r);
Travellist(Head);
printf("%d",r);
system("pause");
Destorylist(Head,8);
}