Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Stack
- {
- public:
- Stack() : head_(nullptr), size_(0) {}
- void removeMinimal()
- {
- if (head_ == nullptr)
- {
- throw "Stack is empty!";
- }
- Node* now = head_;
- long long minElement = head_->val_;
- while (now != nullptr)
- {
- minElement = (minElement < now->val_ ? minElement : now->val_);
- now = now->next_;
- }
- while (head_ != nullptr && head_->val_ == minElement)
- {
- Node* newHead = head_->next_;
- delete head_;
- head_ = newHead;
- }
- now = head_;
- while (now != nullptr)
- {
- while (now->next_ != nullptr && now->next_->val_ == minElement)
- {
- Node* newNext = now->next_->next_;
- delete now->next_;
- now->next_ = newNext;
- }
- now = now->next_;
- }
- }
- Stack& operator+=(long long x)
- {
- Node* newNode = new Node(x, head_);
- head_ = newNode;
- ++size_;
- return *this;
- }
- friend std::ostream& operator<<(std::ostream& out, const Stack& elem)
- {
- Node* now = elem.head_;
- while (now != nullptr)
- {
- out << now->val_ << ' ';
- now = now->next_;
- }
- return out;
- }
- ~Stack()
- {
- while (head_ != nullptr)
- {
- Node* newHead = head_->next_;
- delete head_;
- head_ = newHead;
- }
- }
- private:
- struct Node
- {
- Node() : val_(0), next_(nullptr) {}
- Node(long long val, Node* next) : val_(val), next_(next) {}
- long long val_;
- Node* next_;
- };
- Node* head_;
- size_t size_;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement