diff --git a/4.2/iterate_list.cpp b/4.2/iterate_list.cpp new file mode 100644 index 0000000..6497877 --- /dev/null +++ b/4.2/iterate_list.cpp @@ -0,0 +1,35 @@ +#include +#include + +template +struct Node +{ + T value; + std::unique_ptr> next; +}; + +template +std::size_t countStep(const std::unique_ptr>& node, std::size_t i) +{ + return (node) + ? countStep(node->next, i + 1) + : i; +} + +template +std::size_t count(const std::unique_ptr>& head) +{ + return countStep(head, 0); +} + +int main() +{ + using NodeT = Node; + + auto head = std::make_unique(NodeT{5, nullptr}); + head->next = std::make_unique(NodeT{12, nullptr}); + head->next->next = std::make_unique(NodeT{35, nullptr}); + head->next->next->next = std::make_unique(NodeT{1, nullptr}); + + std::cout << "Size: " << count(head) << '\n'; +}