运行正确但是提交
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int coef;
int exp;
struct LNode *Next;
}LNode, *LinkList;
LinkList L1, L2, L3;
void InitPolyn(LinkList &L)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
L = p;
L->Next = NULL;
}
void CreatPolyn(LinkList &L, int m)
{
LinkList s;
L = (LinkList)malloc(sizeof(LNode));
s = L;
for(int i = 0; i < m; i++)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
scanf("%d%d", &p->coef, &p->exp);
s->Next = p;
s = p;
s->Next = NULL;
}
}
void DestoryPolyn(LinkList &L)
{
LinkList p;
p = L;
while(p)
{
p = p->Next;
free(L);
L = p;
}
}
void PrintPolyn(LinkList &L)
{
int flag = 0;//flag is used to control the format of output
LinkList p;
p = L->Next;
if(p == NULL)
{
printf("0 0\n");
return;
}
while(p)
{
if(!flag)
flag = 1;
else
printf(" ");
printf("%d %d", p->coef, p->exp);
p = p->Next;
}
}
LinkList BeforeNode(LinkList L, LinkList p)
{
LinkList r = L;
while(r->Next != p)
r = r->Next;
return r;
}
int compare(int a, int b)
{
if(a > b)
return 1;
else if(a == b)
return 0;
else
return -1;
}
LinkList InsertPolyn(LinkList &L, LinkList p)
{
LinkList r, s;
r = L;
while(r->Next != p)
{
r = r->Next;
}
if(r->Next == p)
{
s = (LinkList)malloc(sizeof(LNode));
r->Next = s;
s->Next = p;
}
return s;
}
LinkList DeletePolyn(LinkList &L, LinkList p)
{
LinkList r = L;
while(r->Next != p)
{
r = r->Next;
}
if(r->Next == p)
{
r->Next = p->Next;
free(p);
}
r = r->Next;
return r;
}
void AddPolyn(LinkList &L1, LinkList &L2)
{
LinkList p1, p2;
p1 = L1->Next;
p2 = L2->Next;
while(p1 && p2)
{
switch(compare(p1->exp, p2->exp))
{
case -1:
p1 = InsertPolyn(L1, p1);
p1->coef = p2->coef;
p1->exp = p2->exp;
p2 = p2->Next;
break;
case 0:
if(p1->coef + p2->coef == 0)
{
p1 = DeletePolyn(L1, p1);
p2 = p2->Next;
}
else
{
p1->coef += p2->coef;
p1 = p1->Next;
p2 = p2->Next;
}
break;
case 1:
p1 = p1->Next;
break;
}
}
if(p2)
{
p1 = BeforeNode(L1, p1);
p1->Next = p2?p2:p1;
}
}
LinkList MultiplyPolyn(LinkList &L1, LinkList &L2, LinkList &L3)
{
LinkList Rear, p1, p2, p;
int coef, exp;
if(!L1 && !L2)
return NULL;
p1 = L1->Next;
p2 = L2->Next;
Rear = L3;
while(p2)
{
LinkList r;
r = (LinkList)malloc(sizeof(LNode));
r->coef = p1->coef * p2->coef;
r->exp = p1->exp + p2->exp;
r->Next = NULL;
Rear->Next = r;
Rear = r;
p2 = p2->Next;
}
while(p1)
{
p2 = L2->Next;
Rear = L3->Next;
while(p2)
{
exp = p1->exp + p2->exp;
coef = p1->coef * p2->coef;
while(Rear->Next && Rear->Next->exp > exp)
Rear = Rear->Next;
if(Rear->Next && Rear->Next->exp == exp)
{
if(Rear->Next->coef + coef != 0)
Rear->Next->coef += coef;
else
{
p = Rear->Next;
Rear->Next = p->Next;
free(p);
}
}
else
{
p = (LinkList)malloc(sizeof(LNode));
p->coef = coef;
p->exp = exp;
p->Next = Rear->Next;
Rear->Next = p;
Rear = Rear->Next;
}
p2 = p2->Next;
}
p1 = p1->Next;
}
p2 = L3;
L3 = L3->Next;
free(p2);
p = L3->Next;
while(p->Next)
{
if(p->Next->coef == 0)
{
p->Next = p->Next->Next;
}
p = p->Next;
}
return L3;
}
int main()
{
int m, n;
InitPolyn(L1);
InitPolyn(L2);
InitPolyn(L3);
scanf("%d", &m);
CreatPolyn(L1, m);
scanf("%d", &n);
CreatPolyn(L2, n);
L3 = MultiplyPolyn(L1, L2, L3);
AddPolyn(L1, L2);
PrintPolyn(L3);
printf("\n");
PrintPolyn(L1);
}
总是答案出错,实在找不出问题了,求大佬帮助