/
nanezz
/
testtask2
Обзор
Документация
Войти
/
nanezz
/
testtask2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
List.h
92 строки
2 KB
nanezz
create: CMakeLists.txt, List.h, test_list.cpp, demoVendorCatch2.exe
17 апр 2026, 00:46
Верифицирован
17 апр 2026, 00:46
6799398
Код
Авторство
О чём код?
#include <iostream> #include <stdexcept> struct ListNode { public: ListNode(int value, ListNode* prev = nullptr, ListNode* next = nullptr) : value(value), prev(prev), next(next) { if (prev != nullptr) prev->next = this; if (next != nullptr) next->prev = this; } public: int value; ListNode* prev; ListNode* next; }; class List { public: List() : m_head(new ListNode(static_cast<int>(0))), m_size(0), m_tail(new ListNode(0, m_head)) {} virtual ~List() { Clear(); delete m_head; delete m_tail; } bool Empty() { return m_size == 0; } unsigned long Size() { return m_size; } void PushFront(int value) { new ListNode(value, m_head, m_head->next); ++m_size; } void PushBack(int value) { new ListNode(value, m_tail->prev, m_tail); ++m_size; } int PopFront() { if (Empty()) throw std::runtime_error("list is empty"); auto node = extractPrev(m_head->next->next); int ret = node->value; delete node; return ret; } int PopBack() { if (Empty()) throw std::runtime_error("list is empty"); auto node = extractPrev(m_tail); int ret = node->value; delete node; return ret; } void Clear() { auto current = m_head->next; while (current != m_tail) { current = current->next; delete extractPrev(current); } } private: ListNode* extractPrev(ListNode* node) { auto target = node->prev; target->prev->next = target->next; target->next->prev = target->prev; --m_size; return target; } private: ListNode* m_head; ListNode* m_tail; unsigned long m_size; };