#include template struct Node { T value; Node* next; Node(T value, Node* next = nullptr) : value(value), next(next) {} }; bool makeTotal(Node* head) { int len = 0; for (Node* i = head; i != nullptr; i = i->next) len++; if (len < 3) return false; Node* prev = head; Node* next = head->next->next; head = head->next; bool balanced = true; while (next != nullptr) { if (prev->value + next->value != head->value) { balanced = false; break; } prev = prev->next; head = head->next; next = next->next; } if (!balanced) { prev->next = next; delete head; makeTotal(prev); } return balanced; } int main() { // Node* list = new Node(1, new Node(-4, new Node(-5, new Node(-1, new Node(4))))); Node* list = new Node(10, new Node(-5, new Node(-5, new Node(-15, new Node(2))))); std::cout << makeTotal(list) << std::endl; for (Node* i = list; i != nullptr; i = i->next) std::cout << i->value << " "; std::cout << std::endl; Node* tmp = nullptr; while (list != nullptr) { tmp = list->next; delete list; list = tmp; } }