#include <iostream>
#include <forward_list>
#include <algorithm>
#include <vector>
using namespace std;
#ifdef FIRST_METHOD
/*
方法一:
思路:将头结点插入forward_list, find函数查找第一个元素,若查找到数字的位置,则下一位插入;通过remove函数删除节点。
*/
/*
void RemoveNodeFromForwardList(int num, int head)
{
forward_list<int> forwardList; // 创建一个单链表
forwardList.push_front(head); // 初始化头结点
for(int i = 1; i < num; i++) {
int front, back;
cin>>back>>front;
auto iter = find(forwardList.begin(), forwardList.end(), front);
forwardList.insert_after(iter, back);
}
int last;
cin>>last; // 输入要删除的节点
forwardList.remove(last);
for(auto iter = forwardList.begin(); iter != forwardList.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
}
*/
/*
方法二:
思路:将头结点插入vector, find函数查找第一个元素,若查找到数字的位置,则下一位插入;
若最后位置查找到,则直接插入;通过erase函数删除节点。
*/
void RemoveNodeFromForwardList(int num, int head)
{
vector<int> vec;
vec.push_back(head); // 初始化头结点
for(int i = 1; i < num; i++) {
int front, back;
cin>>back>>front;
auto iter = find(vec.begin(), vec.end(), front);
if (iter != vec.end()) {
vec.insert(iter+1, back);
} else {
ec.push_back(back);
}
}
int last;
cin>>last; // 输入要删除的节点
vec.erase(vec.begin(), vec.end(), remove);
for(auto iter = forwardList.begin(); iter != forwardList.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
}
#else
/*
思路:我们也可以用正统的链表做法。构建链表,然后依次将结点插入。
插入的时候遍历链表找到插入结点的前序结点(因为表中元素互异),断开前序结点与后序结点的连接,插入结点连接后续结点,前序结点连接插入结点。
后续直接遍历链表输出,当遇到要删除的结点值时不输出即可。
*/
struct Node {
int data;
struct Node * next;
Node(int x) : data(x), next(nullptr) {}
};
void RemoveNodeFromForwardList(int num, int head)
{
Node *pHead = new Node(head); //head = 2
for(int i = 1; i < num; i++) {
int pre, cur;
cin>>cur>>pre; // cur = 1, pre =2
Node *pCurNode = new Node(cur);
Node *pPreNode = pHead;
while(pPreNode->data != pre) {
pPreNode = pPreNode->next;
}
pCurNode->next = pPreNode->next; // 断开
pPreNode->next = pCurNode; //插入
}
int remove;
cin>>remove;
Node *pNewNode = pHead;
while(pNewNode !=nullptr) {
if(pNewNode->data != remove) {
cout<<pNewNode->data<<" ";
}
pNewNode = pNewNode->next;
}
cout<<endl;
}
#endif
int main()
{
int num, head;
while(cin>>num>>head) {
RemoveNodeFromForwardList(num, head);
}
}