单链表的操作运行出现乱码

利用单链表对一元多项式进行创建、相加等操作

#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Status;

typedef struct pNode{
    int coef;      //系数域
    int exp;       //指数域
    struct pNode* link;    //定义结点指针的另一种写法
}PNode;

typedef struct polynominal{
    PNode *head;
}Polynominal;

void Create(Polynominal *p);
Status Output(Polynominal *p);
void Destroy(Polynominal *p);
void Add(Polynominal *px,Polynominal *qx);

void main()
{
    Polynominal px,qx ;
    Create(&px);
    Create(&qx);
    printf("the polynominal px is:");
    Output(&px);
    printf("\nthe polynominal qx is:");
    Output(&qx);
    Add(&px,&qx);
    printf("\nthe added polynominal is:");
    Output(&qx);
    Destroy(&px);
    Destroy(&qx);
}

void Create(Polynominal *p)
{
    PNode *pn,*pre,*q;
    p->head=(PNode*)malloc(sizeof(PNode));
    p->head->exp=-1;
    p->head->link=p->head;
    for(;;)                //无限循环语句,直到遇到break退出循环
    {
        pn=(PNode*)malloc(sizeof(PNode));
        printf("coef:\n");
        scanf("%d",&pn->coef);
        printf("exp:\n");
        scanf("%d",&pn->exp);
        if(pn->exp<0)
        {
            break;
        }
        pre=p->head;
        q=p->head->link;
        while(q&&q->exp>pn->exp)
        {
            pre=q;
            q=q->link;
        }
        pn->link=q;
        pre->link=pn;
    }
}

Status Output(Polynominal *p)
{
    PNode *q;
    if(!p->head->link)           //判断多项式是否为空
        return ERROR;
    q=p->head->link;
    printf("%d*x^%d",q->coef,q->exp);
    q=q->link;
    while(q)
    {
        if(q->exp==0)      //常数项
        {
            if(q->exp>0)
            {
                printf("+%d",q->coef);
            }
            else
            {
                printf("%d",q->coef);
            }
        }
        else if(q->coef>0)   //非常数项系数大于0
        {
            printf("+%d*x^%d",q->coef,q->exp);
        }
        else                  //非常数项系数小于0
        {
            printf("%d*x^%d",q->coef,q->exp);
        }
        q=q->link;
    }
}

void Destroy(Polynominal *p)
{

运行后输入一元多项式各系数和次数后出现无限乱码

对所有循环都检查过了,没有大括号的遗漏

问题出在哪里呢