单链表解决多项式相加问题

麻烦大神帮忙看看哪里错了
#include<stdio.h>
#include<malloc.h>
#define MAX 1000
typedef int ElemType;
typedef struct LNode
{
ElemType ai;
ElemType bi;
struct LNode *next;
}AddList;
void CreateList(AddList *&L,int n)//创建
{
AddList *s,*r;
L=(AddList *)malloc(sizeof(AddList));
L->next=NULL;
r=L;
for(int i=0;i<n;i++)
{
s=(AddList *)malloc(sizeof(AddList));
scanf("%d%d",&s->ai,&s->bi);
r->next=s;
r=s;
}
r->next=NULL;
}
void InitList(AddList *&L)//初始化
{
L=(AddList *)malloc(sizeof(AddList));
L->next=NULL;
}
void add(AddList *&L1,AddList *&L2)//相加
{
AddList *p1=L1->next,*p2=L2->next;
AddList *s,*r;
while(p1!=NULL)
{
int e=0;
while(p2!=NULL)
{
if(p1->bi==p2->bi)
{
e=1;
s=p1;
}
}
if(e)
s->ai+=p2->ai;
else
{
r=(AddList *)malloc(sizeof(AddList));
r->ai=p2->ai;
r->bi=p2->bi;
r->next=s->next;
s->next=r;
}
p2=p2->next;
}
}
void sort(AddList *&L)//排序
{
AddList *p1,*p2;
p1=p2=L->next;
ElemType t1,t2;
if(L->next!=NULL)
{
while(p1->next!=NULL)
{
while(p2->next!=NULL)
{
p2=p2->next;
if(p1->bibi)
{
t1=p1->ai;
p1->ai=p2->ai;
p2->ai=t1;
t2=p1->bi;
p1->bi=p2->bi;
p2->bi=t2;
}
}
p1=p1->next;
p2=p1;
}
}
}
void DispList(AddList *L)//输出
{
int i=0;
AddList *p=L->next;
while(p!=NULL)
{
if(p->ai!=0)
printf("%d %d\n",p->ai,p->bi);
p=p->next;
}
}
int main()
{
int n1,n2;
ElemType a1[MAX][2],a2[MAX][2];
AddList *L1,*L2;
scanf("%d%d",&n1,&n2);
/*for(int i=0;i<n1;i++)
for(int j=0;j<2;j++)
scanf("%d",&a1[i][j]);
for(int i=9;i<n2;i++)
for(int j=0;j<2;j++)
scanf("%d",&a2[i][j]); */
CreateList(L1,n1);
CreateList(L2,n2);
InitList(L1);
InitList(L2);
add(L1,L2);
sort(L1);
DispList(L1);
return 0;
}