C++链表队列实现中的查询

Query in implementing queue in linked list in c++

我试过用链表实现队列。这是我写的代码。当我尝试使用 disp() 方法时,我得到了一个无限循环 运行。我找不到逻辑中的错误。我无法理解 while(temp!=NULL) 行和递增温度如何永无止境。

 #include<iostream>
using namespace std;

struct node{
    int x;
    node *next;
};

class queue{
    node *front,*rear;
    public:
        queue(){
            front = NULL;
            rear= NULL;
        }
        
        void enqueue(int x){
            node *temp=new node;
            temp->x=x;
            temp->next=NULL;
            if(rear==NULL){
                rear=temp;
                front = temp;
            }
            else{
                rear->next=temp;
                rear=temp;
            }
        }
        
        int dequeue(){
            node *temp =front;
            if(temp!=NULL){
                int x =temp->x;
                temp=temp->next;
                delete temp;
                return x;
            }
            else{
                return -1e7;
            }
        }
        
        void disp(){
            node *temp=front;
            while(temp!=NULL){
                cout<<temp->x<<" ";
                temp=temp->next;
            }
            
        }
};

int main(){
    int n;
    cin>>n;
    queue obj;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        obj.enqueue(x);
    }
    
    int x,y;
    cin>>x>>y;
    obj.enqueue(x);
    obj.enqueue(y);
    
    obj.dequeue();
    obj.disp();
}

您的 dequeue 没有正确地使第一个元素出队:

        node *temp =front;
        if(temp!=NULL){
            int x =temp->x;
            temp=temp->next;
            delete temp;
            return x;
        }

temp = temp->next 使 temp 指向第二个节点,并在下一行中删除第二个节点,而不是第一个节点。

使第二个节点成为新的 front 并删除旧的 front:

        node *temp = front;
        if(temp != NULL){
            int x = temp->x;
            front = temp->next;   // <---
            delete temp;
            return x;
        }