#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
//结构体定义
typedef struct Node
{
Elemtype data;
struct Node *Link;
}LNode,*LinkList;
//尾插法顺序创建链表
int Create_L(LinkList &L,int n)//n是链表a中的n个值
{
LinkList p,f;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->data=0;
L->Link=NULL;//建立带头结点的空链表,接下来一个个插入数值
f=L;//指针f永远指向最后一个结点,以便插入新结点
printf("请输入链表中数值\n");
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));//新建一个结点, 指针p指向该结点
scanf("%d",&p->data);//输入新结点数值域内数值
p->Link=NULL;//别忘指定新结点指针为NULL
f->Link=p;//将建好的新结点插入链表中
f=p;//移动指针f使之指向最后结点
}
}
//删除其中大于等于mink且小于等于maxk的元素
int Indelete_L(LinkList &L,int mink,int maxk)
{
LinkList p,f,s,t;
p=f=L->Link;
t=L;
while(p->data<=maxk)
{
p=p->Link;
}
while(f->data<mink)
{
f=f->Link;
t=t->Link;//t指向最后一个满足小于mink的结点
}
t->Link=p;
}
//打印链表
int Print_L(LinkList L)
{
LinkList g;
g=L->Link;
while(g)
{
printf("%d ",g->data);
g=g->Link;
}
printf("\n");
}
//主函数运行
int main()
{
int n,mink,maxk;
printf("链表中数据个数n为:");
scanf("%d",&n);
LinkList L;
Create_L(L,n);
printf("原链表为:");
Print_L(L);
printf("删除元素的最小值mink为:");
scanf("%d",&mink);
printf("删除元素的最小值maxk为:");
scanf("%d",&maxk);
Indelete_L(L,mink,maxk);
printf("删除其中大于等于mink且小于等于maxk的元素后链表为:");
Print_L(L);
}
附运行结果如下: