【问题描述】已知线性表中的元素以值非递减有序排列,并以单链表作为存储结构(含头结点),试写一高效的算法,删除
表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间(注意:mink和maxk是给定
的两个参变量,它们的值可以和表中的元素相同,也可以不同.) 这里注意是大于且小于,没有等于.
【输入形式】第一行:非递减序列以-1结束 第二行为 mink maxk 也以-1结束
【输出形式】删除后的链表数据
【样例输入】1 3 5 7 7 9 10 12 -1
3 9 -1
【样例输出】1 3 10 12
/*************************************************************************
> File Name: test1.cpp
> Author:PeersLee
> Mail: 529884069@qq.com
> Created Time: 2015年10月18日 星期日 09时43分30秒
************************************************************************/
#include<iostream>
using namespace std;
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
void CreatedList(LinkList &L){
LinkList p, q;
L = new Lnode();
L->next = NULL;
p = L;
while(1){
q = new Lnode();
q->next = NULL;
cin>>q->data;
if(q->data == -1) break;
p->next = q;
p = q;
}
}
void CoutList(LinkList L){
LinkList p;
p = L->next;
while(p){
cout<<p->data<<ends;
p = p->next;
}
}
void DeleteList(LinkList &L, int mink, int maxk){
LinkList p = L;
LinkList q = L->next;
while(q != NULL){
if(q->data > mink && q->data < maxk){
p->next = q->next;
delete q;
q=p->next;
}else{
p = p->next;
q = p->next;
}
}
}
int main(){
LinkList L;
int mink, maxk, e;
CreatedList(L);
cin>>mink>>maxk>>e;
DeleteList(L,mink,maxk);
CoutList(L);
return 0;
}