一个小小的问题请教高手
C语言数据结构中链表的删除怎么不能正常删除啊
# include <stdio.h>
# include <malloc.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
Linklist Creat()
{
Linklist head;
head=(Linklist)malloc(sizeof(Lnode));
if(!head){
printf("create fail\n");
return 0;
}
head->data=NULL;
head->next=head;
return head;
}
int Listlength(Linklist head){//求链表的长度
int i=0;
Linklist p;
p=head;
while(p->next!=head){
i++;
p=p->next;
}
return i;
}
void Insertelem(Linklist head,int i,int elem){//插入元素
Linklist p,q;
p=(Linklist)malloc(sizeof(Lnode));
p->data=elem;
q=head;
int pos;
int len=Listlength(head);
if(i<1||i>len+1){
printf("sorry you input error\n");
return ;
}
if(i=len+1){
for(pos=1;pos<i;pos++)
q=q->next;
p->next=q->next;
q->next=p;
}
else{
for(pos=0;pos<i;pos++)
q=q->next;
p->next=q->next;
q->next=p;
}
}
void delelem(Linklist head,int i,int &elem){//删除一个元素
Linklist p,q;
p=head;
if(i<1||i>Listlength(head)){
printf("you put the number is error\n");
return ;
}
int pos;
for(pos=1;pos<i;pos++)
p=p->next;
q=p->next;
p=q->next;
elem=q->data;
}
void Printlist(Linklist head)//输出元素
{
Linklist p;
p=head;
if(p->next==head){
printf("this is a empty list\n");
return ;
}
p=p->next;
while(p->next!=head){
printf("%3d",p->data);
p=p->next;
}
printf("%3d",p->data);
}
void Freelist(Linklist head){
free(head);
}
void main()
{
int i,elem;
Linklist head;
head=Creat();
for(i=1;i<10;i++)
Insertelem(head,i,i*i);
Printlist(head);
printf("\n");
delelem(head,4,elem);
printf("\n");
printf("%d",elem);
printf("\n");
Printlist(head);
free(head);
}