#include struct Node { int value; Node* next; }; class List { public: List() = default; ~List() { Node* current { head }; while (current != nullptr) { Node* tmp { current }; current = current->next; delete tmp; } } void insert(int value) { head = new Node { value, head }; ++size; } void print() const { Node* tmp { head }; while (tmp != nullptr) { std::cout << tmp->value << " "; tmp = tmp->next; } std::cout << std::endl; } List zipmerge(List const& other) const { List result { }; if (size != other.size) return result; Node* left { head }; Node* right { other.head }; result.head = new Node { left->value, nullptr }; left = left->next; Node* current { result.head }; for (unsigned i { 1 }; i < size; ++i) { current->next = new Node { right->value, nullptr }; current = current->next; current->next = new Node { left->value, nullptr }; current = current->next; left = left->next; right = right->next; } current->next = new Node { right->value, nullptr }; return result; } private: Node* head { nullptr }; unsigned size { }; }; int main() { List l1 {}; l1.insert(7); l1.insert(5); l1.insert(3); l1.insert(1); List l2 {}; l2.insert(8); l2.insert(6); l2.insert(4); l2.insert(2); List l3 { l1.zipmerge(l2) }; l1.print(); l2.print(); l3.print(); }