CPP-101: Двусвързан списък с водещ елемент

Изтриване на елемент от началото на списъка

За изтриване на елемент от началото на списъка дефинираме член-функция pop_front(). Преди да се опита да изтрие елемент функцията трябва да провери дали в списъка има елементи. Ако списъка е празен, то опита да изтрием елемент e грешка и функцията ще генерира изключение:

    ...
    if(empty()) {
        throw ListError("pop_front(): list is empty...");
    }
    ...

За удобство дефинираме указатели:

  • Node* front насочен към първият елемент на списъка;
  • Node* new_front носечан към елемента след първия елемент на списъка – това е елементът, който ще стане начало на списъка, след като изтрием първият елемент.

Изтриване на елемент от началото на списъка

За да изтрием първият елемент на списъка е необходимо да свържем елементите head_ и new_front, след което да освободим паметта заемана от елемента front:

    ...
    head_->next_=new_front;
    new_front->prev_=head_;
    
    delete front;
    ...

Изтриване на елемент от началото на списъка

Комбинирайки тези фрагмети код получаваме цялата дефиниция на член-функцията pop_front():


void pop_front() {
    if(empty()) {
        throw ListError("pop_front(): list empty...");
    }
    Node* front=head_->next_;
    Node* new_front=front->next_;
    
    head_->next_=new_front;
    new_front->prev_=head_;
    
    delete front;
}

Публикувано в CPP-101, Кръг 2, ООП с етикети , , . Постоянна връзка.