Advertisement
Neveles

Untitled

Jan 20th, 2020
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class List
  6. {
  7. private:
  8.     struct Node
  9.     {
  10.         Node()
  11.         {
  12.             next_ = nullptr;
  13.             item_ = 0;
  14.         }
  15.         Node* next_;
  16.         int item_;
  17.     };
  18.     Node* head_;
  19. public:
  20.     List();
  21.     ~List();
  22.     List operator+(int item);
  23.     List operator+=(int item);
  24.     friend ostream& operator << (ostream& out, const List& list);
  25.     void removeLess();
  26.     void removeMinimal();
  27. };
  28.  
  29. List::List() : head_(nullptr) {};
  30.  
  31. List::~List()
  32. {
  33.     //while (head_)
  34.     //{
  35.     //  Node* temp = head_;
  36.     //  head_ = head_->next_;
  37.     //  delete temp;
  38.     //}
  39. }
  40.  
  41. List List::operator+(int item)
  42. {
  43.     if (head_ == nullptr)
  44.     {
  45.         head_ = new Node;
  46.         head_->item_ = item;
  47.         head_->next_ = nullptr;
  48.     }
  49.     else
  50.     {
  51.         Node* newNode = new Node;
  52.         newNode->item_ = item;
  53.         newNode->next_ = head_;
  54.         head_ = newNode;
  55.     }
  56.     return *this;
  57. }
  58.  
  59. List List::operator+=(int item)
  60. {
  61.     if (head_ == nullptr)
  62.     {
  63.         head_ = new Node;
  64.         head_->item_ = item;
  65.         head_->next_ = nullptr;
  66.     }
  67.     else
  68.     {
  69.         Node* current = this->head_;
  70.         while (current->next_ != nullptr)
  71.         {
  72.             current = current->next_;
  73.         }
  74.         current->next_ = new Node;
  75.         current = current->next_;
  76.         current->item_ = item;
  77.         current->next_ = nullptr;
  78.     }
  79.     return *this;
  80. }
  81.  
  82. ostream& operator <<(ostream& out, const List& list)
  83. {
  84.     List::Node* temp = list.head_;
  85.     while (temp != nullptr)
  86.     {
  87.         out << temp->item_ << endl;
  88.         temp = temp->next_;
  89.     }
  90.     return out;
  91. }
  92.  
  93. void List::removeLess()
  94. {
  95.     if (head_ != nullptr)
  96.     {
  97.         Node* current = head_;
  98.         Node* processed = head_->next_;
  99.         while (processed != nullptr)
  100.         {
  101.             if (processed->item_ < current->item_)
  102.             {
  103.                 current->next_ = processed->next_;
  104.                 delete processed;
  105.             }
  106.             else
  107.             {
  108.                 current = processed;
  109.             }
  110.             processed = current->next_;
  111.         }
  112.     }
  113.     else cout << endl << "List is empty!" << endl;
  114. }
  115.  
  116. void List::removeMinimal()
  117. {
  118.     if (head_ != nullptr)
  119.     {
  120.         Node* temp = head_;
  121.         int min = temp->item_;
  122.         while (temp != nullptr)
  123.         {
  124.  
  125.             if (temp->item_ < min)
  126.             {
  127.                 min = temp->item_;
  128.             }
  129.             temp = temp->next_;
  130.  
  131.         }
  132.         temp = head_;
  133.  
  134.  
  135.         while (temp != nullptr)
  136.         {
  137.             if (temp->item_ == min)
  138.             {
  139.                 head_ = temp->next_;
  140.                 delete temp;
  141.                 temp = head_;
  142.             }
  143.             else break;
  144.         }
  145.  
  146.         temp = head_;
  147.         Node* tempNext = head_->next_;
  148.         while (tempNext != nullptr)
  149.         {
  150.             if (tempNext->item_ == min)
  151.             {
  152.                 temp->next_ = tempNext->next_;
  153.                 delete tempNext;
  154.                 tempNext = temp->next_;
  155.             }
  156.             else
  157.             {
  158.                 temp = tempNext;
  159.                 tempNext = temp->next_;
  160.             }
  161.         }
  162.  
  163.     }
  164.     else cout << "List is empty!";
  165. }
  166.  
  167. int main()
  168. {
  169.     List list;
  170.     int value;
  171.     for (int i = 0; i < 5; ++i)
  172.     {
  173.         cin >> value;
  174.         list += value;
  175.     }
  176.  
  177.     cout << endl << list << endl;
  178.     //list.removeLess();
  179.     //cout << endl << list << endl;
  180.     list.removeMinimal();
  181.     cout << endl << list << endl;
  182.     return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement