刚学的新手求助!!!郁闷(单链表中删除表中所有大于x且小于y的元素)
程序写出来了也没有错误,但是就是实现不了删除的命令,请各位懂数据结构的大虾们帮忙一下程序代码:
//已知线性表中的元素以值递增有序排列,并以单链表作存储结构。 //试写一算法,删除表中所有大于x且小于y的元素(若表中存在这样的元素)同时释放被删除结点空间。 #include <stdio.h> #include <stdlib.h> #include <math.h> typedef int ElemType; typedef struct LNode { ElemType data; /* 数据子域 */ struct LNode *next; /* 指针子域 */ }LNode; /* 结点结构类型 */ LNode *L; /* 函数声明 */ LNode *creat_L(); void out_L(LNode *L); ElemType delete_L(LNode *L,int i); /* 建立线性链表*/ LNode *creat_L() { LNode *h,*p,*s; ElemType x; h=(LNode *)malloc(sizeof(LNode)); /* 分配头结点 */ h->next=NULL; p=h; printf("输入一串数字(以-1结束):\ndata= "); scanf("%d",&x); /* 输入第一个数据元素 */ while( x!=-1) /* 输入-1,结束循环 */ { s=(LNode *)malloc(sizeof(LNode)); /* 分配新结点 */ s->data=x; s->next=NULL; p->next=s; p=s; printf("data= "); scanf("%d",&x); /* 输入下一个数据*/ } return(h); } /* creat_L */ /* 输出单链表中的数据元素*/ void out_L(LNode *L) { LNode *p; p=L->next; printf("\n数据是:"); while(p!=NULL) { printf("%5d",p->data); p=p->next; } } /* out_link */ /* 删除大于x小于y的值*/ void delete_L(LNode *L,int a,int b) { LNode *p,*q; p=L; ElemType y; if(p->next==NULL) printf("ERROR:链表为空"); while(p->next->data >a && p->next->data <b) { q=p->next; y=q->data; p->next=q->next; free(q); p=p->next; } } /* delete_L */ void main() { int a,b; L=creat_L( ); out_L(L); printf("\n\n请输入你要删除的元素的范围x和y:\n"); scanf("%d%d",&a,&b); delete_L(L,a,b); out_L(L); printf("\n"); } /* main */