Advertisement
Guest User

IntDList

a guest
Nov 23rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. //Создать список из целых чисел. Создать новый список, записав в него вначале все четные, а затем все нечетные числа из исходного списка.
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5. ifstream in ("input.txt");
  6.  
  7. struct IntDListNode {
  8.     int value;
  9.     IntDListNode* prev;
  10.     IntDListNode* next;
  11. };
  12.  
  13. class IntDList {
  14. public:
  15.     IntDListNode* head;
  16.     IntDListNode* tail;
  17.     int size;
  18.     /*void addAtBeg(int value) {
  19.         IntDListNode* node = new IntDListNode;
  20.         node->prev = 0;
  21.         node->value = value;
  22.         node->next = head;
  23.         if(!size) head = tail = node;
  24.         else {
  25.             head->prev = node;
  26.             head = node;
  27.         }
  28.         size++;
  29.     }*/
  30.     void addToEnd(int value) {
  31.         IntDListNode* node = new IntDListNode;
  32.         node->prev = tail;
  33.         node->value = value;
  34.         node->next = 0;
  35.         if(!size) head = tail = node;
  36.         else {
  37.             tail->next = node;
  38.             tail = node;
  39.         }
  40.         size++;
  41.     }
  42.     void toHead(IntDListNode* node) {
  43.         if (node->next) node->next->prev = node->prev;
  44.         if (node->prev) node->prev->next = node->next;
  45.        
  46.         node->prev = 0;
  47.         node->next = head;
  48.         head->prev = node;
  49.         head = node;
  50.     }
  51.     void output() {
  52.         IntDListNode* node = head;
  53.         //cout << "list size = " << size << endl;
  54.         while (node) {
  55.             cout << node->value << ' ';
  56.             node = node->next;
  57.         }
  58.         cout << endl;
  59.     }
  60.     IntDList(): head(0), tail(0), size(0) {}
  61. };
  62.  
  63. int main() {
  64.     int n; in >> n;
  65.     IntDList list;
  66.     for (int i = 0; i < n; i++) {
  67.         int v; in >> v;
  68.         list.addToEnd(v);
  69.     }
  70.    
  71.     IntDListNode* curr = list.head;
  72.     IntDListNode* nxtnode;
  73.     while (curr) {
  74.         nxtnode = curr->next;
  75.         if (!(curr->value % 2)) list.toHead(curr);
  76.         curr = nxtnode;
  77.     }
  78.    
  79.     /*IntDListNode* curr;
  80.     IntDListNode* srtend = list.head;
  81.     IntDListNode* nxtnode;
  82.     while (!(srtend->value % 2) && srtend) srtend = srtend->next;
  83.     if (srtend) curr = srtend->next;   
  84.     while (curr) {
  85.         nxtnode = curr->next;
  86.         if (!(curr->value % 2)) {
  87.             curr->next->prev = curr->prev;
  88.             curr->prev->next = curr->next;
  89.            
  90.             curr->prev = srtend->prev;
  91.             curr->next = srtend;
  92.             curr->prev->next = curr;
  93.             srtend->prev = curr;
  94.         }
  95.         curr = nxtnode;
  96.     }*/
  97.    
  98.     list.output();
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement