用链表实现多项式相加并输出显示

【求助】用链表实现多项式相加并输出显示
< <一道数据结构题目> > 关于用链表实现多项式相加:
题目要求:用户可以不按升幂或降幂输入数据建立多项式链表,但必须按照指数降序排列输出多项式;   程序功能要求能够完成两个多项式的相加、相减,并将结果输出显示。
作答要求:多项式相加的基本过程的算法(可以使用程序流程图)   、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;


以下是本人写的按升幂输入,升幂输出多项式的程序,但是编译通过,却运行不到结果,请大家帮忙指点修正:


[code]

#include <stdio.h>
#include <malloc.h>
#define   LEN   sizeof(struct   Polynomial)
struct   Polynomial
  {   float   coef;
  long   expn;
  struct   Polynomial   *next;
  };
  int   n=0,sum=0;
  int   cmp(long   a,long   b)
  {
  int   flag;
  if(a <b)   flag=-1;
  else   if(a> b)
  flag=1;
  else   flag=0;
  return   flag;
  }
  struct   Polynomial   *creat   (void)
  {
  struct   Polynomial   *head;
  struct   Polynomial   *p1,*p2;
  p1=p2=(struct   Polynomial   *)malloc(LEN);
  scanf( "%f,%ld ",&p1-> coef,&p1-> expn);
  head=NULL;
  while(p1-> coef!=0)
  {
  n++;
  if(n==1)   head=p1;
  else   p2-> next=p1;
  p2=p1;
  p1=(struct   Polynomial   *)malloc(LEN);
  scanf( "%f,%ld ",&p1-> coef,&p1-> expn);
  }
  p2-> next=NULL;
  return   head;
  }


  struct   Polynomial   *add(struct   Polynomial   *ah,struct   Polynomial   *bh)
  {
  struct   Polynomial   *pa1,*pa2,*pb1,*pb2;
  float   sumcoef;
  pa1=ah;
  pb1=bh;
  pa2=pa1-> next;
  pb2=pb1-> next;
  while(pa1&&pb1)
    {
    switch(cmp(pa2-> expn,pb2-> expn))
  {
  case   -1:pb2-> next=pa2;
    pa2-> next=pb2-> next;
    pb2=pb2-> next;
    pa2=pa1-> next;break;
  case   0   :sumcoef=pa1-> coef+pb1-> coef;
  if(sumcoef!=0.0){
  pa1-> coef=sumcoef;}break;
  case   1:pb1-> next=pa2;
  pa2-> next=pb2;
  pa2=pa1-> next-> next;
  pb2=pb2-> next;
  break;
  }
    }
  if(pb2)
  pb1-> next=pb2;
  free(bh);
  return   ah;
  }
  void   display(struct   Polynomial   *head)
  {
  struct   Polynomial   *p;
  printf( "The   combinated   Polynomial   is:\n ");
  p=head;
  if(p!=NULL)
  do
    {printf( "%f,x^%ld ",p-> coef,p-> expn);
    p=p-> next;
    }
    while   (p!=NULL);
    }


  void   main()
  {
    struct   Polynomial   *pahead,*pbhead,*abhead;

    printf( "Input   list   Pa:\n ");
    pahead=creat();
    sum=sum+n;
    printf( "Input   list   Pb:\n ");
    pbhead=creat();
    sum=sum+n;
    abhead=add(pahead,pbhead);
    display(abhead);
    }