从堆栈列表(链表)中弹出一个数字

popping out a number from a stack list (linked list)?

本文关键字:数字 一个 堆栈 列表 链表      更新时间:2023-10-16
class stack_class
{
private:
    struct stack_struct *head;
public:
    stack_class();
    ~stack_class();
    void pushNumber(int number);
    void popNumber();
    void findNumber();
    void clearStack();
    void sizeFinder();
    void printStack();
};
void stack_class::popNumber()
{
    stack_struct *pointerPop=NULL,*pointerPop2=NULL;
    int popCounter=0,i=0;
    pointerPop2=tailPointer;
    if(head==NULL)
    {
        cout<<"nNo Member to Delete.n";
    }
    else
    {
        while(pointerPop2)
        {
            popCounter++;
            //cout<<pointerFunc3->number<<endl;
            pointerPop2=pointerPop2->next_number;
        }
        pointerPop=tailPointer;
        while(i<(popCounter-2))
        {
            pointerPop=pointerPop->next_number;
            i++;
        }
        pointerPop->next_number=NULL;
        delete head;
        head=pointerPop;
    }
}
void stack_class::printStack()
{
    pointerFunc3=tailPointer;
    if(tailPointer==NULL)
    {
        cout<<"nNo Members in List.n";
    }
    else
    {
        cout<<"nnList Is:n";
        while(pointerFunc3)
        {
            cout<<pointerFunc3->number<<endl;
            pointerFunc3=pointerFunc3->next_number;
        }
    }
}

类的构造函数

stack_class::stack_class()
{
    head=NULL;
}

这是我的代码,它的问题是,当我弹出最后一个数字并尝试打印列表时,它进入一个无限循环并打印垃圾。当我按下删除选项后,所有在列表中已被删除,程序冻结。有什么建议吗?我该如何修复它?

第一个while循环的条件永远不会为false。根据你如何实现你的next_number(如果它是一个循环链表),我相信你应该把它改成:

while(pointerPop2 != head)

如果你想循环遍历所有节点

相关文章: