分析:考虑双向链表:链表插入删除操作注意寻找头元素并更新
代码语言:javascript复制#include <bits/stdc .h>
using namespace std;
struct node
{
int data;
node*left,*right;
node (int x)
{
data=x;
left=right=NULL;
}
}*m[100005],*q;
int n,head=1;
int main()
{
cin>>n;
m[1]=new node(1);
for(int i=2;i<=n;i )
{
int k,p;
cin>>k>>p;
m[i]= new node(i);
if(p) //插右边
{
if(m[k]->right)
{
m[k]->right->left=m[i];
m[i]->right=m[k]->right;
}
m[k]->right=m[i];
m[i]->left=m[k];
}
else
{
if(m[k]->left)
{
m[k]->left->right=m[i];
m[i]->left=m[k]->left;
}
m[k]->left=m[i];
m[i]->right=m[k];
if(k==head)head=i;
}
}
int f;
cin>>f;
while(f--)
{
int k;
cin>>k;
if(m[k]->left)
{
m[k]->left->right=m[k]->right;
}
if(m[k]->right)
{
m[k]->right->left=m[k]->left;
}
m[k]->right=m[k]->left=NULL;
}
q=m[head];
while(q)
{
cout<<q->data<<" ";
q=q->right;
}
return 0;
}