fork download
  1. #include <iostream>
  2.  
  3. template <typename T>
  4. class LinkedList {
  5. private:
  6. struct Node {
  7. T data;
  8. Node* next;
  9. Node(const T& value) : data(value), next(nullptr) {}
  10. };
  11.  
  12. Node* head;
  13. int size;
  14.  
  15. public:
  16. LinkedList() : head(nullptr), size(0) {}
  17.  
  18. ~LinkedList() {
  19. while (head != nullptr) {
  20. Node* temp = head;
  21. head = head->next;
  22. delete temp;
  23. }
  24. }
  25.  
  26. // Додавання нового елемента на початок списку
  27. void pushFront(const T& value) {
  28. Node* newNode = new Node(value);
  29. newNode->next = head;
  30. head = newNode;
  31. size++;
  32. }
  33.  
  34. // Вилучення першого елемента списку
  35. void popFront() {
  36. if (head != nullptr) {
  37. Node* temp = head;
  38. head = head->next;
  39. delete temp;
  40. size--;
  41. }
  42. }
  43.  
  44. // Додавання нового елемента на кінець списку
  45. void pushBack(const T& value) {
  46. Node* newNode = new Node(value);
  47. if (head == nullptr) {
  48. head = newNode;
  49. } else {
  50. Node* current = head;
  51. while (current->next != nullptr) {
  52. current = current->next;
  53. }
  54. current->next = newNode;
  55. }
  56. size++;
  57. }
  58.  
  59. // Вилучення останнього елемента списку
  60. void popBack() {
  61. if (head == nullptr) {
  62. return;
  63. }
  64. if (head->next == nullptr) {
  65. delete head;
  66. head = nullptr;
  67. } else {
  68. Node* current = head;
  69. while (current->next->next != nullptr) {
  70. current = current->next;
  71. }
  72. delete current->next;
  73. current->next = nullptr;
  74. }
  75. size--;
  76. }
  77.  
  78. // Визначення кількості елементів списку
  79. int getSize() const {
  80. return size;
  81. }
  82. };
  83.  
  84. int main() {
  85. LinkedList<int> list;
  86. list.pushFront(1);
  87. list.pushFront(2);
  88. list.pushBack(3);
  89. list.pushBack(4);
  90.  
  91. std::cout << "Кількість елементів у списку: " << list.getSize() << std::endl;
  92.  
  93. list.popFront();
  94. list.popBack();
  95.  
  96. std::cout << "Кількість елементів у списку після вилучення: " << list.getSize() << std::endl;
  97.  
  98. return 0;
  99. }
  100.  
Success #stdin #stdout 0.01s 5340KB
stdin
Standard input is empty
stdout
Кількість елементів у списку: 4
Кількість елементів у списку після вилучення: 2