Я пытаюсь воссоздать очередь в C ++, и у меня возникают проблемы с правильной вставкой указателей.Взгляните
#include "stdafx.h"
#include <iostream>
using namespace std;
class Node {
public:
int value;
Node * next_node = nullptr;
Node * previous_node = nullptr;
};
class Queue {
public:
Node * front_node = nullptr;
Node * back_node = nullptr;
void insert(int number) {
Node * NewNode = new Node{};
NewNode->value = number;
if (front_node == nullptr) {
front_node = NewNode;
}
else if (back_node == nullptr) {
back_node = NewNode;
}
else if (front_node->previous_node == nullptr) {
front_node->previous_node = back_node;
back_node = NewNode;
}
else {
Node * temp_node = new Node{};
temp_node = front_node->previous_node;
while (1 == 1) {
if (temp_node->previous_node == nullptr) {
temp_node->previous_node = back_node;
back_node = NewNode;
break;
}
else {
temp_node = temp_node->previous_node;
}
}
}
}
int deque() {
if (front_node == nullptr) {
if (back_node != nullptr) {
int return_value = back_node->value;
back_node = nullptr;
return return_value;
}
return 0;
}
else {
int return_value = front_node->value;
front_node = front_node->previous_node;
return return_value;
}
}
};
int main()
{
Queue queue;
queue.insert(10);
queue.insert(9);
queue.insert(8);
queue.insert(7);
queue.insert(6);
cout << queue.deque() << endl;
cout << queue.deque() << endl;
cout << queue.deque() << endl;
cout << queue.deque() << endl;
cout << queue.deque() << endl;
system("PAUSE");
return 0;
}
В соответствии с функцией вставки по мере продолжения front_node является nullptr, поэтому первый узел будет вставлен туда, и он получится корректным.Следующим был бы задний узел, и это получилось бы прекрасно и модно.Когда дело доходит до третьего узла, я вставляю указатель заднего узла в предыдущий указатель переднего узла, а новый узел - в указатель back_node.Новый узел помещается в задний узел, но указатель переднего узла-> предыдущий_узел выглядит как nullptr.
Редактировать 1: я изменил if с front_node! = Nullptr на front_node! = Nullptr и back_node ==nullptr.Кажется, он все еще не вставляется в предыдущий узел front_node
Редактировать 2: Я воспользовался советом, чтобы переписать его, и теперь у меня есть функция вставки, работающая правильно, но теперь, кажется, разматывание в третьем деке сходит на нет.
Редактировать 3: Моя последняя ошибка была в том, что вместо front_node-> previous_node = back_node я сделал front_node = back_node.Спасибо всем, кто помог.