设在一个带头结点的单链表中所有元素结点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素
//带头结点的单链表无序
//删除数比表中所有值介于在两个给定值(作为函数参数给出)之间的元素。
#include<stdio.h>
#include<stdlib.h>
struct Lnode
{
int data;
Lnode *next;
};
int Init(struct Lnode *L, int i)
{
struct Lnode *p;
struct Lnode *q=L;
int j=0;
while(j<i)
{
p = (struct Lnode *)malloc(sizeof(struct Lnode));
scanf("%d",&(p->data));
p->next =NULL;
q->next = p;
q= p;
j++;
}
return 0;
}
int rangedelete(struct Lnode *L,int x,int y)
{
if(x>y)
{
int z = x;
x=y;
y=z;
}
struct Lnode *p,*q;
p = L->next;
q= L;
while(p!=NULL)
{
if(x<=p->data&&p->data<=y)
{
q->next = p->next;
free(p);
p = q->next;
}
else
{
q= p;
p = p->next;
}
}
return 0;
}
int main()
{
struct Lnode Head;
struct Lnode *L=&Head;
L->next = NULL;
int i = 5;
Init(L,i);
printf("请输入两个值!");
int x,y;
scanf("%d",&x);
scanf("%d",&y);
rangedelete(L,x,y);
printf("\n结果如下!\n");
struct Lnode *p =L->next;
while(p!=NULL)
{
printf("%d",(*p).data);
p=(*p).next;
}
return 0;
}