Я пытаюсь сделать двусвязный список. Функция push(int x) должна добавить узел в список и сделать правильную ссылку. Я использую:
class Node {
public:
int value;
Node* next;
Node* prev;
public:
Node() {}
void set_value(int x) { value = x; }
void set_next(Node* x) { next = x; }
void set_prev(Node* x) { prev = x; }
Node* get_next() { return next; }
Node* get_prev() { return prev; }
};
class deque {
public:
Node* head;
Node* tail;
public:
deque() { head = NULL; tail = NULL; }
void push(int x) {
Node* n = new Node();
n->set_value(x);
n->set_next(NULL);
n->set_prev(NULL);
Node* t = head; //link to the next node
if (t == NULL) {
head = n;
} else {
while (t->get_next() != NULL) {
t = t->get_next();
}
t->set_next(n);
}
}
};
Поскольку я тестировал часть, которая соединяет узел со следующим, работает нормально, но у меня возникли проблемы с подключением узла к предыдущему. На ум приходит вариант первого:
Node* t = tail;
if (t == NULL) {
tail = n;
} else {
while (t->get_prev() != NULL) {
t = t->get_prev();
}
t->set_prev(n);
}
Но при использовании этого хвостовой узел всегда является текущим узлом n, если только узел n является единственным узлом в очереди... Что мне делать? большое спасибо
n->set_prev(tail); tail->set_next(n); tail = n;
с правильной проверкой нулевого указателя? - person Angivare   schedule 25.01.2015