G药
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
新年伊始,飞神得到了一个叫做药的链表. . .(弱已词穷. . .
初始时链表只有头指针,对链表存在三种操作。
输入
多组输入。
对于每组数据,第一行一个整数n(1 <= n <= 1000),代表有n次操作。
接下来的n行,每行描述一次操作,形式如下。
A val。表明此时向链表中添加一个元素val(val不会超出int)。
D rank。表明此时要在链表中删除第rank个元素,若不存在,则忽略此次操作。
Q。按序将链表中的元素全部输出,若链表为空,则忽略此次操作。
输出
对于每次第三种操作,按序将链表中的元素全部输出。
示例输入
6 A 1 A 2 A 5 Q D 3 Q
示例输出
1 2 5 1 2
提示
#include<stdio.h>
#include<stdlib.h>
struct nobe
{
int data;
struct nobe *next;
}*p,*head,*q,*t;
int main()
{
char a[10];
int n,b;
while(scanf("%d",&n)!=EOF)
{
head=(struct nobe*)malloc(sizeof(struct nobe));
head->next=NULL;
t=head;
int num=0;
while(n--)
{
scanf("%s",&a);
if(a[0]=='A')
{
scanf("%d",&b);
if(num==0)
{
p=(struct nobe*)malloc(sizeof(struct nobe));
p->data=b;
p->next=NULL;
t->next=p;
t=p;
}
else
{
p=(struct nobe*)malloc(sizeof(struct nobe));
p->data=b;
p->next=NULL;
q=head;
while(q->next!=NULL)
{
if(q->next->data >= p->data)
{
p->next=q->next;
q->next=p;
break;
}
else
q=q->next;
}
if(q->next==NULL)
q->next=p;
}
num++;
}
else if(a[0]=='D')
{
scanf("%d",&b);
if(num==0)
{
}
else
{
if(b>num)
{
}
else
{ p=head;
int numm=0;
while(p->next!=NULL)
{
if(p->next!=NULL)
{
}
else
break;
numm++;
if(numm==b)
{
t=p->next;
p->next=t->next;
num--;
break;
}
else
{
p=p->next;
}
}
}
}
}
else if(a[0]=='Q')
{
//printf("$$$");
p=head->next;
if(num==0)
{
}
else
{
int kk=1;
while(p!=NULL)
{
if(kk==1)
kk=0;
else
printf(" ");
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
}
}
}
}