Хвост, указывающий на последний узел?

0
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, если список пуст.

Теги:

1 ответ

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).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню