#include
#include
#include
#include
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为string类型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}
void CreateList_Up(LinkList &L, int n)
{
void insertUp(LinkList &L, LinkList &p);
for(int i=0; inew LNode;
cin>>p->data;
insertUp(L,p);
}
}
void insertUp(LinkList &L, LinkList &p)
{
LinkList q,q2;
q=L;
q2=L->next;
while(q2 && q2->data < p->data )
{
q=q2;
q2=q2->next;
}
if(q2==NULL)
{
q->next=p;
p->next=q2;
}
else if(q2->data==p->data)
{
delete p;
}
else
{
q->next=p;
p->next=q2;
}
}
void showList(LinkList &L)
{
if(L->next==NULL)
{
cout<<"empty!"<return;
}
LinkList p=L->next;
int n=1;
while(p!=NULL)
{
cout<":"<data<next;
}
}
DeleteMinMax(LinkList &L,int mink,int maxk)
{
LinkList p=L->next,pre=L,s;
while(p && p->data<=mink)
{
pre=p;
p=p->next;
}
while(p && p->datanext;
}
LinkList q=pre->next;
pre->next=p;
while(q!=p)
{
s=q->next;
delete q;
q=s;
}
}
int main()
{
LinkList La;
InitList(La); //初始化带头结点的单链表(存储int类型数据)
CreateList_Up(La,6); //创建递增单链表(去掉重复数据)
cout<<"Show La:"<showList(La); //单链表遍历
int mink,maxk;
cin>>mink>>maxk;
DeleteMinMax(La,mink,maxk); //链表中去掉(mink,maxk)区间的元素
cout<<"After deleting ("<","<"):"<showList(La); //单链表遍历
return 0;
}
找到小于等于mink的值的最大索引节点,用pre指向;
找到小于等于maxk的值的最大索引节点,用p指向;
此时链表分为三段
97行将前后两段连起来;
98行的循环,依次删除中间段的所有节点。