Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void DoubleList::deleteUsersWithNegativeBalance()
- {
- //Встаём в начало
- Node* it = begin;
- // Если не пусто
- if (it == nullptr)
- {
- return;
- }
- // То двигаемся вперёд
- it = it->next;
- // Пока мы не пустые
- while (it != nullptr)
- {
- // Если наш баланс меньше 0
- if (it->data.balans < 0)
- {
- // Сохраняем узел для удаления в дальнейшем
- Node* toDelete = it;
- // Говорим, что для предыщуего следующим будет наш следующий (ибо нас самих надо удалить)
- it->previous->next = it->next;
- // И если следующий не пустой
- if (it->next != nullptr)
- {
- // То ему надо сказать, что его предущим буду не я ( т.к. меня удаляют), а мой предыдущий
- it->next->previous = it->previous;
- }
- // двигаемся вперёд
- it = it->next;
- // удаляем тот самый сохранённый узел с отриц.балансом
- delete toDelete;
- }
- // Иначе
- else
- {
- // Просто двигаемся вперёд
- it = it->next;
- }
- }
- //Изначально мы сдвинулись вперёд, поэтому в самый первый элемент не заглянули, сделаем это сейчас
- // Мы сверху уже проверили на пустоту, однако на баланс проверяем только сейчас
- if (begin->data.balans < 0)
- {
- // Сохраняем его для удаления
- Node* toDelete = begin;
- // Перемещаем на следующий
- begin = begin->next;
- // Если следующий (после перемещения) оказался не пустым
- if (begin != nullptr)
- {
- // то нужно ему сказать, что его предыдущий не begin (который мы планируем удалить), а nullptr
- begin->previous = nullptr;
- }
- // удаляем сохраннённый узел с отриц.балансом
- delete toDelete;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement