用c++写的把稀疏多项式的奇次项和偶次项分开

用的是单链表,但是函数无法运行,请大佬看看哪里有错

#include<iostream>
#include<ctype.h>
using namespace std;
#include<stdlib.h>
#include<math.h>
#define ERROR 0
#define OK 1
typedef int Status; 
typedef int ElemType;
typedef struct PolyNode {
    int coef;
    int exp;
    struct PolyNode *next;
}PolyNode, *PolyLink; // 多项式元素(项)结点类型
typedef PolyLink LinkedPoly; // 链式多项式
void Create(PolyLink &p, int n){
 
    PolyNode  *s =NULL;
    PolyNode *pre =NULL;
    PolyNode *q =NULL;
    p=(PolyLink)malloc(sizeof(PolyNode));                     // 建立一个带头节点的单链表
    p->next =NULL;
    for (int i = 1; i <=n ; ++i) {      // 依次输入n个非零项
        s =(PolyLink)malloc(sizeof(PolyNode));                  // 生成新节点
        cout<<"请输入"<<i<<"的系数和指数:"<<endl;
        cin >> s->coef >> s->exp;      // 输入系数和指数
        pre = p;                        // pre用于保存q的前驱,初值为头结点
        q = p->next;                    // q初始化,指向首元节点
        while ( q && q->exp < s->exp ){   // 找到第一个大于输入项指数的项*q
            pre = q;
            q = q->next;
        }
        s->next = q;                // 将输入项s插入到q和其前驱节点pre之间
        pre->next = s;
    }
}
int printer(PolyLink &L){
 
    if (L == NULL) return ERROR;
    PolyNode *p = L->next;
    while (p){
        cout<<p->coef<<" "<<p->exp<<" ";
        p = p->next;
    }
    return 0;
}
void Separation(PolyLink &plyn,PolyLink &odd)
{ PolyNode *q,*p,*s;
odd=(PolyLink)malloc(sizeof(PolyNode));
  odd->next=NULL;   //建立奇次项空表
  q=plyn;p=plyn->next;s=odd;//s指向奇次项链表的尾结点,
                             //p指向待判断结点
  while(p!=plyn){
  if(p->exp%2==0){q=p;p=p->next;}
  else {
          q->next=p->next;//从原表中删除奇次项结点
          p->next=s->next;s->next=p;//插入到新表中
          p=q->next;s=s->next;//p、s指针后移
          }
      }
}
int main(){
    PolyLink plyn,odd; 
    ElemType n;
    cout<<"changdu"<<endl;
    cin>>n;
    Create(plyn,n);
    printer(plyn);
    Separation(plyn,odd);
    printer(plyn);

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html