我正在尝试编写自己的模板队列类来学习如何使用模板。我看到这种类型的问题经常被问到,并且我已经阅读了很多回复,但我仍然没有看到我做错了什么。
template <class type>
struct Node{
type data;
Node *next;
};
template <class type>
class LinkedListQueue{
public:
LinkedListQueue();
void push(type new_data);
void pop();
type front();
void print();
private:
Node<type> *head;
Node<type> *tail;
};
template <class type>
LinkedListQueue<type>::LinkedListQueue(){
this->head = NULL;
this->tail = NULL;
}
template <class type>
void LinkedListQueue<type>::push(type new_data){
Node<type> *newNode;
newNode->data = new_data;
newNode->next = NULL;
if(this->head == NULL){
this->head = newNode;
this->tail = newNode;
}else{
this->tail->next = newNode;
this->tail = newNode;
}
}
template <class type>
void LinkedListQueue<type>::pop(){
if(this->head != NULL){
this->head = this->head->next;
if(this->head == NULL){
this->tail == NULL;
}
}else{
cout << "Queue is Empty" << endl;
}
}
template <class type>
type LinkedListQueue<type>::front(){
return(this->head->data);
}
int main() {
LinkedListQueue<int> newQueue;
newQueue.push(5);
newQueue.push(4);
cout << newQueue.front() << endl;
newQueue.pop();
cout << newQueue.front() << endl;
}
我无法确定问题出在哪里。如果我注释掉 pop 和 last front call,第一个 front() 调用会正确输出。但是,取消注释 pop 和 front 会破坏一切。当我尝试调试 pop() 时,列表中似乎只有一个节点。
任何帮助将不胜感激。