#include <iostream>
using namespace std;
int main() {
#include <iostream>
struct Node {
int data;
Node* next;
};
class LinkedList {
private:
Node* head;
public:
LinkedList() {
head = nullptr;
}
void insert(int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
void remove(int value) {
if (head == nullptr) {
return;
}
if (head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* prev = head;
Node* curr = head->next;
while (curr != nullptr && curr->data != value) {
prev = curr;
curr = curr->next;
}
if (curr != nullptr) {
prev->next = curr->next;
delete curr;
}
}
bool search(int value) {
Node* temp = head;
while (temp != nullptr) {
if (temp->data == value) {
return true;
}
temp = temp->next;
}
return false;
}
void display() {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}
int size() {
int count = 0;
Node* temp = head;
while (temp != nullptr) {
count++;
temp = temp->next;
}
return count;
}
void clear() {
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
}
};
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnN0cnVjdCBOb2RlIHsKICAgIGludCBkYXRhOwogICAgTm9kZSogbmV4dDsKfTsKCmNsYXNzIExpbmtlZExpc3Qgewpwcml2YXRlOgogICAgTm9kZSogaGVhZDsKCnB1YmxpYzoKICAgIExpbmtlZExpc3QoKSB7CiAgICAgICAgaGVhZCA9IG51bGxwdHI7CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaW50IHZhbHVlKSB7CiAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2RlOwogICAgICAgIG5ld05vZGUtPmRhdGEgPSB2YWx1ZTsKICAgICAgICBuZXdOb2RlLT5uZXh0ID0gbnVsbHB0cjsKCiAgICAgICAgaWYgKGhlYWQgPT0gbnVsbHB0cikgewogICAgICAgICAgICBoZWFkID0gbmV3Tm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBOb2RlKiB0ZW1wID0gaGVhZDsKICAgICAgICAgICAgd2hpbGUgKHRlbXAtPm5leHQgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGVtcC0+bmV4dCA9IG5ld05vZGU7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVtb3ZlKGludCB2YWx1ZSkgewogICAgICAgIGlmIChoZWFkID09IG51bGxwdHIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGhlYWQtPmRhdGEgPT0gdmFsdWUpIHsKICAgICAgICAgICAgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgdGVtcDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgTm9kZSogcHJldiA9IGhlYWQ7CiAgICAgICAgTm9kZSogY3VyciA9IGhlYWQtPm5leHQ7CgogICAgICAgIHdoaWxlIChjdXJyICE9IG51bGxwdHIgJiYgY3Vyci0+ZGF0YSAhPSB2YWx1ZSkgewogICAgICAgICAgICBwcmV2ID0gY3VycjsKICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoY3VyciAhPSBudWxscHRyKSB7CiAgICAgICAgICAgIHByZXYtPm5leHQgPSBjdXJyLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgY3VycjsKICAgICAgICB9CiAgICB9CgogICAgYm9vbCBzZWFyY2goaW50IHZhbHVlKSB7CiAgICAgICAgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgd2hpbGUgKHRlbXAgIT0gbnVsbHB0cikgewogICAgICAgICAgICBpZiAodGVtcC0+ZGF0YSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2b2lkIGRpc3BsYXkoKSB7CiAgICAgICAgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgd2hpbGUgKHRlbXAgIT0gbnVsbHB0cikgewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgdGVtcC0+ZGF0YSA8PCAiICI7CiAgICAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIGludCBzaXplKCkgewogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgd2hpbGUgKHRlbXAgIT0gbnVsbHB0cikgewogICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvdW50OwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7CiAgICAgICAgd2hpbGUgKGhlYWQgIT0gbnVsbHB0cikgewogICAgICAgICAgICBOb2RlKiB0ZW1wID0gaGVhZDsKICAgICAgICAgICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICAgICAgICAgIGRlbGV0ZSB0ZW1wOwogICAgICAgIH0KICAgIH0KfTsKCXJldHVybiAwOwp9