刚学的新手求助!!!郁闷(单链表中删除表中所有大于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)
如果一个节点不是要删除的岂不就结束了										
					
	
