刚学的新手求助!!!郁闷(单链表中删除表中所有大于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 */








while(p->next->data >a && p->next->data <b)
如果一个节点不是要删除的岂不就结束了

