链表-删除指定元素
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
对于一个给定的线性表,要求删除线性表内的大于等于 min 且小于等于 max 的数,并输出删除后的线性表
要求:必须使用链表做,否则不计成绩!
要求:必须使用链表做,否则不计成绩!
输入
输入的第一行为一个正整数 T,表示有 T 组测试数据。
每组测试数据的第一行为三个整数n、min、max,表示有 n 个数据,删除的范围为[min, max].第二行为 n 个整数代表初始的 n 个数据。
输出
输出删除数据后的线性表,如果线性表为空则输出-1
示例输入
2 3 1 2 1 2 3 5 2 1 1 1 1 1 1
示例输出
3
1 1 1 1 1
#include <iostream> //STL之链表基本操作(删除指定元素)
#include <cstring>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
int j,x,t,n,min,max;
list <int>::iterator i;
cin>>t;
while(t--)
{
list <int> node;
cin>>n>>min>>max;
for(j=0;j<n;j++)
{
cin>>x;
node.push_back(x);
}
for(i=node.begin();i!=node.end();) //遍历链表
{
if(*i>=min&&*i<=max)
node.erase(i++); i++是重点,与平时理解正好相反,前面已经说过不再赘述
else
i++;
}
if(!node.empty())
{
i=node.begin();
for(j=0;j<node.size();j++)
if(j!=node.size()-1)
cout<<*i++<<" ";
else
cout<<*i++<<endl;
}
else
cout<<"-1"<<endl;
}
return 0;
}