#include <iostream>
using namespace std;
struct ListNode {
int data;
ListNode* next;
// 构造函数,data(value), next(nullptr) 是初始化列表;
ListNode(int value) : data(value), next(nullptr) {}
};
// 定义单向链表类
class SinglyLinkedList {
private:
ListNode* header;
public:
SinglyLinkedList(int val) {
header = new ListNode(val);
}
// 在 b 的后面插入 a
void insertByElem(int a, int b) {
ListNode* current = header;
ListNode* newNode = new ListNode(a);
while (current != nullptr && current->data != b) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
// 遍历 链表
void traverse() {
ListNode* current = header;
while (current != nullptr) {
cout << current->data << " ";
current = current->next;
}
cout << endl;
}
// 删除节点 val
void deleteNode(int val) {
ListNode* current = header;
ListNode* prev = nullptr;
while (current != nullptr && current->data != val) {
prev = current;
current = current->next;
}
// 没有 该节点
if (current == nullptr)
return;
// 第一个就是 节点 val 所以 prev没有进入上面的循环
if (prev == nullptr) {
header = current->next;
} else { // 节点 val 在链表中间;
prev->next = current->next;
}
delete current;
}
// 析构函数
~SinglyLinkedList() {
ListNode* current = header;
ListNode* nextNode;
while (current != nullptr) {
nextNode = current->next;
delete current;
current = nextNode;
}
}
};
int main() {
int n, head;
while (cin >> n >> head) {
SinglyLinkedList s(head);
int a, b;
while (--n) {
cin >> a >> b;
s.insertByElem(a, b);
}
int c;
cin >> c;
s.deleteNode(c);
s.traverse();
}
return 0;
}