#include<stdio.h>
#define MAXSIZE 100
typedef struct
{
int data;
int cur;
}sqllist;
void init(sqllist p[]) //数组空间初始化为链表 ,p[0].cur为头指针
{
int i;
for(i=0;i<MAXSIZE-1;i++)
{
p[i].cur=i+1;
}
p[MAXSIZE-1].cur=0;
}
int Malloc_p(sqllist p[]) //分配空闲节点,返回空闲节点的下标
{
int i;
i=p[0].cur;
if(i) p[0].cur=p[i].cur;
return i;
}
void delete_p(sqllist p[],int i) //回收第i个元素 到空闲链表,一般是头指针后一个节点
{
p[i].cur=p[0].cur;
p[0].cur=i;
}
int difference(sqllist p[])
{
int i,s,end,m,n;
init(p);
s=Malloc_p(p); //头结点
end=s; //指向最后一个节点
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++)
{
int t=Malloc_p(p);
scanf("%d",&p[t].data);
p[end].cur=t;
end=t;
}
p[end].cur=0;
int b,j,k,u;
for(i=1;i<=n;i++)
{
scanf("%d",&b);
k=p[s].cur;
u=s;
while(k!=p[end].cur && p[k].data!=b)
{
u=k;
k=p[k].cur;
}
if(k==p[end].cur) //不存在元素
{
int t=Malloc_p(p);
p[t].data=b;
p[t].cur=p[end].cur;
p[end].cur=t;
}
else //若存在,则删除之
{
p[u].cur=p[k].cur;
delete_p(p,k);
if(k==end) end=u;
}
}
return s;
}
void print_sl(sqllist p[],int start){
int t=p[start].cur;
while (t)
{
printf("%d ",p[t].data);
t=p[t].cur;
}
printf("
");
}
int main(void)
{
int start,i;
sqllist t[MAXSIZE];
start=difference(t);
print_sl(t,start);
//for(i=2;i<9;i++)
//printf("%d ",t[i]);
}