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


