用C++构造一元多项式计算器,网上的代码,我把降序改成升序后,后面式子里的合并同类项就出问题了,大家看看

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
void Insert(Polyn p,Polyn h)
{     
    if(p->coe==0) delete p;       
    else
    {
        Polyn q1,q2;
        q1=h;q2=h->next;
        while(q2&&p->exp>q2->exp)
        {   
            q1=q2;
            q2=q2->next;
        }
        if(q2&&p->exp==q2->exp)
        {     
            q2->coe+=p->coe;
            delete p;
            if(!q2->coe)
            {             
                q1->next=q2->next;
                delete q2;
            }
        }
        else
        {                          
            p->next=q2;
            q1->next=p;
        }
    }
}void PrintPolyn(Polyn P)
{ 
    Polyn q=P->next; 
    int flag=1;
    if(!q)
    { 
        cout<<"0"; 
        cout<<endl;
        return;
    }   
    while (q)
    {
        if(q->coe>0&&flag!=1) cout<<"+"; 
        if(q->coe!=1&&q->coe!=-1)
        {
            cout<<q->coe; 
            if(q->exp==1) cout<<"X";
            else if(q->exp) 
                cout<<"X^"<<q->exp;
        }
        else
        {
            if(q->coe==1)
            {
                if(!q->exp) cout<<"1";
                else if(q->exp==1) cout<<"X";
                else cout<<"X^"<<q->exp;
            }
            if(q->coe==-1)
            {
                if(!q->exp) cout<<"-1"; 
                else if(q->exp==1) cout<<"-X"; 
                else cout<<"-X^"<<q->exp;
            }
        }
        q=q->next; 
        flag++;
    }
    cout<<endl;
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

给出完整代码来,可以调试一下
所谓降序升序,是指X的高次方在前还是在后么,是不是你升序排列的不正确呢