Изтриване на елемент от края на списъка
За изтриване на елемент от края на списъка дефинираме член-функция pop_back()
. Преди да се опита да изтрие елемент функцията трябва да провери дали в списъка има елементи. Ако списъка е празен, то опита да изтрием елемент e грешка и функцията ще генерира изключение:
1 2 3 4 5 | ... if (empty()) { throw ListError( "pop_front(): list empty..." ); } ... |
За удобство дефинираме указатели:
Node* back
насочен към последният елемент на списъка;Node* new_back
носочен към елемента преди последният елемент на списъка – това е елементът, който ще стане край на списъка, след като изтрием последният елемент.
За да изтрием последният елемент на списъка е необходимо да свържем елементите new_back
и head_
, след което да освободим паметта заемана от елемента back
:
1 2 3 4 5 6 | ... new_back->next_=head_; head_->prev_=new_back; delete back; ... |
Комбинирайки тези фрагмети код получаваме цялата дефиниция на член-функцията pop_front()
:
1 2 3 4 5 6 7 8 9 10 11 12 | void pop_back() { if (empty()) { throw ListError( "pop_back(): list empty..." ); } Node* back=head_->prev_; Node* new_back=back->prev_; new_back->next_=head_; head_->prev_=new_back; delete back; } |