利用单链表表示一个递增的整数序列,删除链表中值大于等于mink且小于等于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)。
多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔),第三行为给定的mink和maxk(用空格分隔)。当n=0时输入结束。
对于每组数据分别输出一行,依次输出删除元素后的链表元素,元素之间用空格分隔。
5 1 2 3 4 5 2 4 6 2 4 6 8 10 12 3 5 0
1 5 2 6 8 10 12
#include <iostream>
using namespace std;
const int N = 100000;
int head,idx,e[N],ne[N];
void init()
{
head=-1;
idx=0;
}
void add_to_head(int x)
{
e[idx]=x;
ne[idx]=head;
head=idx++;
}
void insert(int x,int k)
{
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx++;
}
void remove(int k)
{
ne[k]=ne[ne[k]];
}
int main()
{
int n;
while(cin>>n,n!=0)
{
init();
for(int i = 1;i <= n;i ++ )
{
int num;
cin>>num;
if(i==1)add_to_head(num);
else insert(num,idx-1);
}
int l,r;
cin>>l>>r;
int st,ed;
for(int i = head;i != -1;i = ne[i] )
{
if(e[i]>=l&&e[i]<=r)
{
st=i;
break;
}
}
for(int i = head;i != -1;i = ne[i] )
{
if((e[i]>=l&&e[i]<=r)&&(!(e[ne[i]]>=l&&e[ne[i]]<=r)))
{
ed=i;
break;
}
}
ne[st-1]=ne[ed];
for(int i = head;i != -1;i = ne[i] )
{
cout<<e[i]<<" ";
}
cout<<endl;
}
return 0;
}