#include <iostream>
template <typename T>
class LinkedList {
private:
struct Node {
T data;
Node* next;
Node(const T& value) : data(value), next(nullptr) {}
};
Node* head;
int size;
public:
LinkedList() : head(nullptr), size(0) {}
~LinkedList() {
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
}
// Додавання нового елемента на початок списку
void pushFront(const T& value) {
Node* newNode = new Node(value);
newNode->next = head;
head = newNode;
size++;
}
// Вилучення першого елемента списку
void popFront() {
if (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
size--;
}
}
// Додавання нового елемента на кінець списку
void pushBack(const T& value) {
Node* newNode = new Node(value);
if (head == nullptr) {
head = newNode;
} else {
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
size++;
}
// Вилучення останнього елемента списку
void popBack() {
if (head == nullptr) {
return;
}
if (head->next == nullptr) {
delete head;
head = nullptr;
} else {
Node* current = head;
while (current->next->next != nullptr) {
current = current->next;
}
delete current->next;
current->next = nullptr;
}
size--;
}
// Визначення кількості елементів списку
int getSize() const {
return size;
}
};
int main() {
LinkedList<int> list;
list.pushFront(1);
list.pushFront(2);
list.pushBack(3);
list.pushBack(4);
std::cout << "Кількість елементів у списку: " << list.getSize() << std::endl;
list.popFront();
list.popBack();
std::cout << "Кількість елементів у списку після вилучення: " << list.getSize() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIExpbmtlZExpc3Qgewpwcml2YXRlOgogICAgc3RydWN0IE5vZGUgewogICAgICAgIFQgZGF0YTsKICAgICAgICBOb2RlKiBuZXh0OwogICAgICAgIE5vZGUoY29uc3QgVCYgdmFsdWUpIDogZGF0YSh2YWx1ZSksIG5leHQobnVsbHB0cikge30KICAgIH07CgogICAgTm9kZSogaGVhZDsKICAgIGludCBzaXplOwoKcHVibGljOgogICAgTGlua2VkTGlzdCgpIDogaGVhZChudWxscHRyKSwgc2l6ZSgwKSB7fQoKICAgIH5MaW5rZWRMaXN0KCkgewogICAgICAgIHdoaWxlIChoZWFkICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgdGVtcDsKICAgICAgICB9CiAgICB9CgogICAgLy8g0JTQvtC00LDQstCw0L3QvdGPINC90L7QstC+0LPQviDQtdC70LXQvNC10L3RgtCwINC90LAg0L/QvtGH0LDRgtC+0Log0YHQv9C40YHQutGDCiAgICB2b2lkIHB1c2hGcm9udChjb25zdCBUJiB2YWx1ZSkgewogICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSh2YWx1ZSk7CiAgICAgICAgbmV3Tm9kZS0+bmV4dCA9IGhlYWQ7CiAgICAgICAgaGVhZCA9IG5ld05vZGU7CiAgICAgICAgc2l6ZSsrOwogICAgfQoKICAgIC8vINCS0LjQu9GD0YfQtdC90L3RjyDQv9C10YDRiNC+0LPQviDQtdC70LXQvNC10L3RgtCwINGB0L/QuNGB0LrRgwogICAgdm9pZCBwb3BGcm9udCgpIHsKICAgICAgICBpZiAoaGVhZCAhPSBudWxscHRyKSB7CiAgICAgICAgICAgIE5vZGUqIHRlbXAgPSBoZWFkOwogICAgICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgICAgICAgICAgZGVsZXRlIHRlbXA7CiAgICAgICAgICAgIHNpemUtLTsKICAgICAgICB9CiAgICB9CgogICAgLy8g0JTQvtC00LDQstCw0L3QvdGPINC90L7QstC+0LPQviDQtdC70LXQvNC10L3RgtCwINC90LAg0LrRltC90LXRhtGMINGB0L/QuNGB0LrRgwogICAgdm9pZCBwdXNoQmFjayhjb25zdCBUJiB2YWx1ZSkgewogICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSh2YWx1ZSk7CiAgICAgICAgaWYgKGhlYWQgPT0gbnVsbHB0cikgewogICAgICAgICAgICBoZWFkID0gbmV3Tm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gaGVhZDsKICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQtPm5leHQgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IG5ld05vZGU7CiAgICAgICAgfQogICAgICAgIHNpemUrKzsKICAgIH0KCiAgICAvLyDQktC40LvRg9GH0LXQvdC90Y8g0L7RgdGC0LDQvdC90YzQvtCz0L4g0LXQu9C10LzQtdC90YLQsCDRgdC/0LjRgdC60YMKICAgIHZvaWQgcG9wQmFjaygpIHsKICAgICAgICBpZiAoaGVhZCA9PSBudWxscHRyKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGhlYWQtPm5leHQgPT0gbnVsbHB0cikgewogICAgICAgICAgICBkZWxldGUgaGVhZDsKICAgICAgICAgICAgaGVhZCA9IG51bGxwdHI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgTm9kZSogY3VycmVudCA9IGhlYWQ7CiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50LT5uZXh0LT5uZXh0ICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50LT5uZXh0OwogICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gbnVsbHB0cjsKICAgICAgICB9CiAgICAgICAgc2l6ZS0tOwogICAgfQoKICAgIC8vINCS0LjQt9C90LDRh9C10L3QvdGPINC60ZbQu9GM0LrQvtGB0YLRliDQtdC70LXQvNC10L3RgtGW0LIg0YHQv9C40YHQutGDCiAgICBpbnQgZ2V0U2l6ZSgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gc2l6ZTsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgTGlua2VkTGlzdDxpbnQ+IGxpc3Q7CiAgICBsaXN0LnB1c2hGcm9udCgxKTsKICAgIGxpc3QucHVzaEZyb250KDIpOwogICAgbGlzdC5wdXNoQmFjaygzKTsKICAgIGxpc3QucHVzaEJhY2soNCk7CgogICAgc3RkOjpjb3V0IDw8ICLQmtGW0LvRjNC60ZbRgdGC0Ywg0LXQu9C10LzQtdC90YLRltCyINGDINGB0L/QuNGB0LrRgzogIiA8PCBsaXN0LmdldFNpemUoKSA8PCBzdGQ6OmVuZGw7CgogICAgbGlzdC5wb3BGcm9udCgpOwogICAgbGlzdC5wb3BCYWNrKCk7CgogICAgc3RkOjpjb3V0IDw8ICLQmtGW0LvRjNC60ZbRgdGC0Ywg0LXQu9C10LzQtdC90YLRltCyINGDINGB0L/QuNGB0LrRgyDQv9GW0YHQu9GPINCy0LjQu9GD0YfQtdC90L3RjzogIiA8PCBsaXN0LmdldFNpemUoKSA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0K