pat上显示内存超限 有部分答案正确 在vc++2010上编译通过 但不能正确输出
求大佬指出错误
#include<stdio.h>
#include<stdlib.h>
typedef struct PolyNode* polynomial;
struct PolyNode{
int coef;
int expon;
polynomial next;
};
void attach(int c,int e,polynomial* prear)
{
polynomial p;
p=(polynomial)malloc(sizeof(struct PolyNode));
p->coef=c;
p->expon=e;
p->next=NULL;
(*prear)->next=p;
*prear=p;
}
polynomial readpoly()
{
polynomial p,rear,t;
int c,e,n;
scanf("%d",&n);
p=(polynomial)malloc(sizeof(struct PolyNode));
p->next=NULL;
rear=p;
while(n--){
scanf("%d %d",&c,&e);
attach(c,e,&rear);
}
t=p;p=p->next;free(t);
return p;
}
polynomial multipoly(polynomial p1,polynomial p2)
{
polynomial p,rear,t1,t2,t;
int c,e;
if(!p1||!p2) return NULL;
t1=p1;t2=p2;
p=(polynomial)malloc(sizeof(struct PolyNode));
p->next=NULL;
rear=p;
while(t2){
attach(t1->coef*t2->coef,t1->expon+t2->expon,&rear);
t2=t2->next;
}
t1=t1->next;
while(t1){
t2=p;rear=p;
while(t2){
c=t1->coef*t2->coef;
e=t1->expon+t2->expon;
while(rear->next&&rear->next->expon>e) rear=rear->next;
if(rear->next&&rear->next->expon==e){
if(rear->next->coef+c){
rear->next->coef+=c;
}
else{
t=rear->next;
rear->next=t->next;
free(t);
}
}
else{
t=(polynomial)malloc(sizeof(struct PolyNode));
t->coef=c;
t->expon=e;
t->next=rear->next;
rear->next=t;
rear=rear->next;
}
t2=t2->next;
}
t1=t1->next;
}
t=p;p=p->next;free(t);
return p;
}
int compare(int a,int b)
{
if(a>b) return 1;
if(a<b) return -1;
if(a==b) return 0;
}
polynomial addpoly(polynomial P1,polynomial P2) {
polynomial P, Rear, t1, t2, t;
int c, e;
if (!P1 && !P2) return NULL;
t1 = P1;
t2 = P2;
P = (polynomial)malloc(sizeof(struct PolyNode)); P->next = NULL;
Rear = P;
while (t1 !=NULL && t2 != NULL) {
if (t1->expon < t2->expon)
{
Rear->next = t2;
t2 = t2->next;
Rear = Rear->next;
}
else if (t2->expon < t1->expon) {
Rear->next = t1;
t1 = t1->next;
Rear = Rear->next;
}
else
{
t2->coef += t1->coef;
if (t2->coef != 0)
{
Rear->next = t2;
t2 = t2->next;
Rear = Rear->next;
}
else {
t = t2;
t2 = t2->next;
free(t);
}
t = t1;
t1 = t1->next;
free(t);
}
}
if (t1 == NULL) {
Rear->next = t2;
}
else if(t2 == NULL){
Rear->next = t1;
}
t2 = P; P = P->next; free(t2);
return P;
}
void printpoly(polynomial p)
{
int flag=0;
if(!p){
printf("0 0\n");
return;
}
while(p){
if(!flag) flag=1;
else printf(" ");
printf("%d %d",p->coef,p->expon);
p=p->next;
}
printf("\n");
}
int main()
{
polynomial p1,p2,pp,ps;
p1=readpoly();
p2=readpoly();
pp=multipoly(p1,p2);
printpoly(pp);
ps=addpoly(p1,p2);
printpoly(ps);
return 0;
}