CCCPaste

9e716357db0b9

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;
}