Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. class Stack
  2. {
  3. public:
  4.  
  5.     Stack() : head_(nullptr), size_(0) {}
  6.  
  7.     void removeMinimal()
  8.     {
  9.         if (head_ == nullptr)
  10.         {
  11.             throw "Stack is empty!";
  12.         }
  13.         Node* now = head_;
  14.         long long minElement = head_->val_;
  15.         while (now != nullptr)
  16.         {
  17.             minElement = (minElement < now->val_ ? minElement : now->val_);
  18.             now = now->next_;
  19.         }
  20.         while (head_ != nullptr && head_->val_ == minElement)
  21.         {
  22.             Node* newHead = head_->next_;
  23.             delete head_;
  24.             head_ = newHead;
  25.         }
  26.         now = head_;
  27.         while (now != nullptr)
  28.         {
  29.             while (now->next_ != nullptr && now->next_->val_ == minElement)
  30.             {
  31.                 Node* newNext = now->next_->next_;
  32.                 delete now->next_;
  33.                 now->next_ = newNext;
  34.             }
  35.             now = now->next_;
  36.         }
  37.     }
  38.  
  39.     Stack& operator+=(long long x)
  40.     {
  41.         Node* newNode = new Node(x, head_);
  42.         head_ = newNode;
  43.         ++size_;
  44.         return *this;
  45.     }
  46.  
  47.     friend std::ostream& operator<<(std::ostream& out, const Stack& elem)
  48.     {
  49.         Node* now = elem.head_;
  50.         while (now != nullptr)
  51.         {
  52.             out << now->val_ << ' ';
  53.             now = now->next_;
  54.         }
  55.         return out;
  56.     }
  57.  
  58.     ~Stack()
  59.     {
  60.         while (head_ != nullptr)
  61.         {
  62.             Node* newHead = head_->next_;
  63.             delete head_;
  64.             head_ = newHead;
  65.         }
  66.     }
  67.  
  68. private:
  69.  
  70.     struct Node
  71.     {
  72.         Node() : val_(0), next_(nullptr) {}
  73.         Node(long long val, Node* next) : val_(val), next_(next) {}
  74.         long long val_;
  75.         Node* next_;
  76.     };
  77.  
  78.     Node* head_;
  79.     size_t size_;
  80. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement