您的位置:首页 > 其它

链表-删除指定元素

2015-11-12 09:12 429 查看


链表-删除指定元素



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


提示

来源

gaoyongxin

示例程序

#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node * inset(struct node *head,int n)
{
int i;
struct node *p,*q,*tail;
q=head;
for(i=0;i<n;i++)
{
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;
}
return(head);
}
int main()
{
int i,j,n,m,a,b,c,k;
struct node *head,*p,*q,*tail;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&m,&a,&b);
head=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
head=inset(head,m);
q=head;
while(q->next!=NULL)
{
k=1;
if((q->next->data>=a)&&(q->next->data<=b))
{
k=0;
p=q->next;
q->next=p->next;
free(p);
}
if(k!=0)
q=q->next;
}
p=head;
p=p->next;
if(p==NULL)
{
free(head);
printf("-1");
}
else
while(p!=NULL)
{
q=p;
printf("%d ",p->data);
p=p->next;
free(q);
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: