Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <limits>
  4.  
  5.  
  6. struct SOListNode
  7. {
  8.     int value;
  9.     SOListNode* next;
  10. };
  11.  
  12.  
  13. class SOList
  14. {
  15.     SOListNode* init;
  16.     SOListNode* term;
  17.  
  18. public:
  19.     SOList()
  20.     {
  21.         init = new SOListNode;
  22.         term = new SOListNode;
  23.         init->next = term;
  24.         term->next = 0;
  25.     }
  26.  
  27.     ~SOList()
  28.     {
  29.         SOListNode *n1, *n2;
  30.         n1 = init;
  31.         while (n1 != 0) {
  32.             n2 = n1->next;
  33.             delete n1;
  34.             n1 = n2;
  35.         }
  36.     }
  37.  
  38.     void transpose(SOListNode* node)
  39.     {
  40.         if (node == init->next)
  41.             return;
  42.         SOListNode* after = node->next;
  43.         SOListNode* this_node = new SOListNode;
  44.         while (init->next != node)
  45.         {
  46.             if (init->next->next == node)
  47.             {
  48.                 this_node = init->next;
  49.                 break;
  50.             }
  51.             init->next = init->next->next;
  52.         }
  53.         this_node->next = node->next;
  54.         node->next = init->next;
  55.         init->next= node;
  56.     }
  57.  
  58.     void print(int K) const
  59.     {
  60.         SOListNode* node = init->next;
  61.         std::cout << "{ ";
  62.         while (node != term && K > 0) {
  63.             std::cout << node->value << " ";
  64.             node = node->next;
  65.             --K;
  66.         }
  67.         std::cout << "}" << std::endl;
  68.     }
  69.  
  70.     SOListNode* find(int k)
  71.     {
  72.         SOListNode* node = init->next;
  73.         while (node != term) {
  74.             if (node->value == k)
  75.             {
  76.                 transpose(node);
  77.                 break;
  78.             }
  79.             node = node->next;
  80.         }
  81.         if (node == term)
  82.             return 0;
  83.  
  84.         return node;
  85.     }
  86.  
  87.     SOListNode* insert(int k)
  88.     {
  89.         SOListNode* new_tail = new SOListNode;
  90.         new_tail->value = k;
  91.         while (init->next != term)
  92.             {
  93.                 init = init->next;
  94.             }
  95.         init->next = new_tail;
  96.         new_tail->next = term;
  97.         return new_tail;
  98.     }
  99.  
  100.     void erase(SOListNode* node)
  101.     {
  102.         if (node == init || node == term)
  103.             return;
  104.         SOListNode* after = node->next;
  105.         SOListNode* this_node = init;
  106.         delete node;
  107.         while (this_node->next != node)
  108.         {
  109.             this_node = this_node->next;
  110.         }
  111.         this_node->next = after;
  112.     }
  113.  
  114.     bool compare(SOList& node)
  115.     {
  116.         bool b1=false;
  117.         bool b2=false;
  118.         SOListNode* n1 = init->next;
  119.         SOListNode* n2 = (node.init)->next;
  120.        
  121.                 while (n1 != term)
  122.                 {
  123.                     if (node.find((*n1).value))
  124.                         b1 = true;
  125.                     else
  126.                         b1 = false;
  127.                         break;
  128.                     n1 = n1->next;
  129.                 }
  130.                 while (n2 != node.term)
  131.                 {
  132.                     if (find((*n2).value))
  133.                         b2 = true;
  134.                     else
  135.                         b2 = false;
  136.                         break;
  137.                     n2 = n2->next;
  138.                 }
  139.        
  140.             if(b1==true && b2==true)
  141.                 return true;
  142.         return false;
  143.  
  144.     }
  145. };
  146.  
  147. int main()
  148. {
  149.     SOList l;
  150.     l.insert(1);
  151.     l.insert(2);
  152.     l.insert(3);
  153.     l.insert(4);
  154.     l.insert(5);
  155.     l.print(10);
  156.     return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement