void IntList::push_front(int value){
IntNode *holder = new IntNode(value);
holder -> next = head;
head = holder;
if(head == 0){
tail = head;
}
tail = holder;
}
заголовок
#ifndef INTLIST_H
#define INTLIST_H
struct IntNode{
int data;
IntNode *next;
IntNode(int data) : data(data), next(0) {}
};
class IntList{
private:
IntNode *head;
IntNode *tail;
public:
void push_front(int value);
};
#endif
Как мне получить хвост для последнего хвоста? У меня есть оператор if, чтобы он был равен 0, если список пуст.
head = holder;
if(head == 0){
tail = head;
}
Вышеуказанные шаги находятся в неправильном порядке: вы устанавливаете голову на держатель (который никогда не будет 0, потому что если выделение памяти не удалось, вы получите исключение, и если он сработает, вы получите указатель на выделенный узел), затем тестирование, если голова еще равна 0.
Вы можете просто отменить свой заказ, но IMHO он чище, чтобы проверить хвост прямо так или иначе:
head = holder;
if (tail == nullptr)
tail = head;
На компиляторах pre-С++ 11 у вас может не быть nullptr
- просто используйте NULL или 0 или измените на if (!tail)
.