#include using namespace std; struct node { int val; node * next; }; struct SLL { node * head; void init() { head = NULL; } void insertFirst(int x) { node * tmp_node = new node; tmp_node->val = x; if(head == NULL) { head = tmp_node; } else { tmp_node->next = head; head = tmp_node; } } void insertLast(int x) { node * tmp_node = new node; tmp_node -> val = x; if(head == NULL) { head = tmp_node; } else { node * tmp = head; while(tmp->next != NULL) { tmp = tmp->next; } tmp->next = tmp_node; } } void deleteFirst() { if(head != NULL) { if(head -> next == NULL) { delete head; head = NULL; } else { node * tmp = head; head = head->next; delete tmp; } } } void deleteLast() { if(head != NULL) { if(head -> next == NULL) { delete head; head = NULL; } else { node * tmp = head; node *prev; while(tmp->next != NULL) { prev = tmp; tmp = tmp->next; } prev->next = NULL; delete tmp; } } } void deleteAll() { while(head != NULL) { deleteFirst(); } } void print() { node * tmp = head; while(tmp != NULL) { cout << tmp->val << " --> "; tmp = tmp -> next; } cout << endl; } bool deleteNode(int x) { if(head != NULL and head->val == x) { deleteFirst(); return true; } node *tmp = head; node *prev = NULL; while(tmp != NULL and tmp->val != x) { prev = tmp; tmp = tmp->next; } if(tmp != NULL and tmp->val == x and tmp->next == NULL) { deleteLast(); return true; } if(tmp != NULL and tmp->val == x) { prev->next = tmp->next; delete tmp; return true; } return false; } }; void func(SLL & sll, int x) { while(sll.deleteNode(x)) { } sll.print(); } int main() { int n; cin >> n; SLL sll; sll.init(); for(int i = 0; i < n; i++) { int x; cin >> x; sll.insertLast(x); } sll.print(); int number; cin >> number; func(sll, number); return 0; }