设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同 )
源程序代码可以实现,运行结果看方截图
#include <iostream>
using namespace std;
//定义存储
typedef struct LNode
{
int data;
struct LNode *next;
} Lnode, *Linklist;
//链表初始化
void init(Linklist &L)
{
L = new Lnode;//开辟空间
L->next = NULL;//头结点置为空
}
//输出数据
void output(Linklist & T)
{
Linklist p = T;
p = p->next;
while(p){
cout<<p->data<<"";
p = p->next;
}
}
//后插法构建链表
void CreateLinklist(Linklist &L, int n)
{
Linklist r = L;
for(int i=0;i<n;i++)
{
Linklist p =new Lnode;//开辟空间
printf("请输入%d个数据\n", i+1);
cin >>p->data;
p->next = NULL;
r->next = p;//将新节点插入r之后
r = p;
}
}
void Delete(Linklist &L, int mink, int maxk)
{
Linklist pre= L;
Linklist p = L->next;
while(p)
{
if(p->data>mink&&p->data<maxk)
{
pre->next = p->next;
}//pre为pa前驱,删除不符合的结点
else
{
pre = p;
} //如果符合条件,执行pre=pa,使pre为pa 的前驱
p = p->next;//指向下一个结点
}
}
int main()
{
Linklist La;
init(La);
int n1;
cout<<"请输入链表元素的个数"<<endl;
cin>>n1;
CreateLinklist(La,n1);
Delete(La,3,9);
cout<<"La:";
output(La);
cout<<endl;
}
运行结果