Advertisement
Sanlover

Untitled

Apr 5th, 2022
1,065
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1.  
  2. void DoubleList::deleteUsersWithNegativeBalance()
  3. {
  4.     //Встаём в начало
  5.     Node* it = begin;
  6.     // Если не пусто
  7.     if (it == nullptr)
  8.     {
  9.         return;
  10.     }
  11.     // То двигаемся вперёд
  12.     it = it->next;
  13.     // Пока мы не пустые
  14.     while (it != nullptr)
  15.     {
  16.         // Если наш баланс меньше 0
  17.         if (it->data.balans < 0)
  18.         {
  19.             // Сохраняем узел для удаления в дальнейшем
  20.             Node* toDelete = it;
  21.             // Говорим, что для предыщуего следующим будет наш следующий (ибо нас самих надо удалить)
  22.             it->previous->next = it->next;
  23.             // И если следующий не пустой
  24.             if (it->next != nullptr)
  25.             {
  26.                 // То ему надо сказать, что его предущим буду не я ( т.к. меня удаляют), а мой предыдущий
  27.                 it->next->previous = it->previous;
  28.             }
  29.             // двигаемся вперёд
  30.             it = it->next;
  31.             // удаляем тот самый сохранённый узел с отриц.балансом
  32.             delete toDelete;
  33.         }
  34.         // Иначе
  35.         else
  36.         {
  37.             // Просто двигаемся вперёд
  38.             it = it->next;
  39.         }
  40.     }
  41.     //Изначально мы сдвинулись вперёд, поэтому в самый первый элемент не заглянули, сделаем это сейчас
  42.     // Мы сверху уже проверили на пустоту, однако на баланс проверяем только сейчас
  43.     if (begin->data.balans < 0)
  44.     {
  45.         // Сохраняем его для удаления
  46.         Node* toDelete = begin;
  47.         // Перемещаем на следующий
  48.         begin = begin->next;
  49.         // Если следующий (после перемещения) оказался  не пустым
  50.         if (begin != nullptr)
  51.         {
  52.             // то нужно ему сказать, что его предыдущий не begin (который мы планируем удалить), а nullptr
  53.             begin->previous = nullptr;
  54.         }
  55.         // удаляем сохраннённый узел с отриц.балансом
  56.         delete toDelete;
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement