Клас List. Конструктор
За реализация на двусвързан списък с водещ елемент дефинираме клас List, който съдържа член променлива head_ от типа Node*. Тази член-променлива е насочена към водещият елемент на списъка. Водещият елемент е фиктивен елемент на списъка, който не е асоцииран с определени данни.
class List {
struct Node {
Node* next_;
Node* prev_;
int data_;
Node(int val) :
next_(0), prev_(0), data_(val)
{}
};
Node* head_;
public:
...
};
[note]Обърнете внимание, че структурата Node е дефинирана като вътрешна струкура в скритата част на класа List. Това прави типа Node недостъпен извън класа List и неговите приятели.[/note]
На фигурата е изобразен списък с три елемента [latex]d_1[/latex], [latex]d_2[/latex], [latex]d_3[/latex]. Член-променливата head_ на списъка е насочена към фиктивният елемент.
Конструкторът на класа List заделя памет за водещият елемент head_ и инициализира указателите next_ и prev_ така, че да сочат към самият водещ елемент.
class List {
...
public:
List() : head_(new Node(0)) {
head_->next_ = head_->prev_ = head_;
}
...
};
Нека добавим и метод empty() към класа List. Този метод връща true когато списъкът е празен. Условието, което е изпълнено, когато списъкът е празен е, че указателите head_, head_->next_ и head_->prev_ имат еднакви стойности. За целите на метода е достатъчно да направим само една от възможните проверки, например:
class List {
...
public:
...
bool empty() const {
return head_==head_->next_;
}
...
};


