if (minimum_.Empty() && Size() != 0) {
Stack<T> right_reversed = right_.GetReversedStack();
right_.DeleteStack();
minimum_ = left_.GetMinStackWithOther(right_reversed);
}
Node* GetFirstNode() { return head_; }
Stack<T> GetMinStackWithOther(Stack<T> other);
Stack<T> GetReversedStack();
template <typename T>
Stack<T> Stack<T>::GetMinStackWithOther(Stack<T> other) {
Stack<T> min_stack;
Node* current_node = head_;
bool current_stack = true;
while (current_stack || current_node != nullptr) {
if (min_stack.Empty() || current_node->value <= min_stack.GetHead().second) {
min_stack.Push(current_node->value);
}
if (current_node->next_node == nullptr && current_stack) {
current_node->next_node = other.GetFirstNode();
current_stack = false;
}
current_node = current_node->next_node;
}
return min_stack;
}
template <typename T>
Stack<T> Stack<T>::GetReversedStack()
{
Stack<T> reversed_stack;
Node* current_node = head_;
while (current_node != nullptr) {
reversed_stack.Push(current_node->value);
}
return reversed_stack;
}