4.3
This commit is contained in:
parent
6571f0eb89
commit
a291f64c7d
|
@ -0,0 +1,58 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct Node
|
||||||
|
{
|
||||||
|
T value;
|
||||||
|
std::unique_ptr<Node<T>> next;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T max(const std::unique_ptr<Node<T>>& node, T max_value)
|
||||||
|
{
|
||||||
|
return (node)
|
||||||
|
? max(node->next, (node->value > max_value)
|
||||||
|
? node->value
|
||||||
|
: max_value)
|
||||||
|
: max_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
using NodeT = Node<std::string>;
|
||||||
|
|
||||||
|
auto head = std::make_unique<NodeT>(NodeT{"5", nullptr});
|
||||||
|
head->next = std::make_unique<NodeT>(NodeT{"12", nullptr});
|
||||||
|
head->next->next = std::make_unique<NodeT>(NodeT{"35", nullptr});
|
||||||
|
head->next->next->next = std::make_unique<NodeT>(NodeT{"JKFHDJKSFHKJSDJFSDKH", nullptr});
|
||||||
|
|
||||||
|
std::cout << "Size 1: " << max(head, std::string{}) << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
using NodeT = Node<int>;
|
||||||
|
|
||||||
|
auto head = std::make_unique<NodeT>(NodeT{1, nullptr});
|
||||||
|
head->next = std::make_unique<NodeT>(NodeT{34, nullptr});
|
||||||
|
head->next->next = std::make_unique<NodeT>(NodeT{12, nullptr});
|
||||||
|
head->next->next->next = std::make_unique<NodeT>(NodeT{-4534, nullptr});
|
||||||
|
head->next->next->next->next = std::make_unique<NodeT>(NodeT{std::numeric_limits<int>::max(), nullptr});
|
||||||
|
|
||||||
|
std::cout << "Size 2: " << max(head, std::numeric_limits<int>::min()) << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
using NodeT = Node<char>;
|
||||||
|
|
||||||
|
auto head = std::make_unique<NodeT>(NodeT{'#', nullptr});
|
||||||
|
|
||||||
|
std::cout << "Size 3: " << max(head, std::numeric_limits<char>::min()) << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::cout << "Size empty: " << max(std::unique_ptr<Node<double>>(), std::numeric_limits<double>::min()) << '\n';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue