题目链接
题目图片及样例
代码(大致思路没错,代码有一点错误,有大佬愿意的话,请务必不吝赐教)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct LNode *List;
struct LNode
{
int zhi;
int xi;
List next;
};
void output(List h)
{
if(!h)
return ;
h=h->next;
while(h)
{
printf("%d %d",h->xi,h->zhi);
if(h->next)
{
printf(" ");
}
h=h->next;
}
printf("\n");
}
List creat()
{
List tmp;
tmp=(List)malloc(sizeof(struct LNode));
tmp->next=NULL;
return tmp;
}
void del(List hd)
{
List tmp=hd;
hd=hd->next;
while(hd)
{
if(hd->xi==0)
{
tmp->next=hd->next;
free(hd);
}
else{
tmp=tmp->next;
}
hd=tmp->next;
}
}
List muti(List l1,List l2)
{
List h=l2->next;
List head=creat();
List hd=head;
l1=l1->next;
l2=l2->next;
bool f=0;
if(!l1||!l2)
{
printf("0 0\n");
return NULL;
}
while(l2)
{
head->next=creat();
head=head->next;
head->xi=(l1->xi)*(l2->xi);
head->zhi=l1->zhi+l2->zhi;
//printf("%d %d ",head->xi,head->zhi);
l2=l2->next;
}
l1=l1->next;
l2=h;
while(l1)
{
while(l2)
{
head=hd;
int xi=(l1->xi)*(l2->xi);
int zhi=l1->zhi+l2->zhi;
List tmp;
tmp=creat();
tmp->xi=xi;
tmp->zhi=zhi;
while (head->next)
{
if(zhi==head->next->zhi)
{
head->next->xi+=xi;
f=1;
break;
}
if(zhi>head->next->zhi)
{
tmp->next=head->next;
head->next=tmp;
f=1;
break;
}
head=head->next;
}
if(!f)
{
head->next=tmp;
}
f=0;
//printf("%d %d ",head->xi,head->zhi);
l2=l2->next;
}
l1=l1->next;
l2=h;
}
del(hd);
return hd;
}
void swap(int * x1,int *x2)
{
int t=*x1;
*x1=*x2;
*x2=t;
}
void Add(List l1,List l2)
{
l1=l1->next;
l2=l2->next;
bool f;
if(l1&&l2)
{f=1;}
else
{f=0;}
if(!l2&&!l1)
{
printf("0 0");
return ;
}
while (l1&&l2)
{
if(l1->zhi>l2->zhi)
{
printf("%d %d",l1->xi,l1->zhi);
l1=l1->next;
}
else if(l1->zhi<l2->zhi)
{
printf("%d %d",l2->xi,l2->zhi);
l2=l2->next;
}
else if(l1->zhi==l2->zhi)
{
printf("%d %d",l1->xi+l2->xi,l2->zhi);
l1=l1->next;
l2=l2->next;
}
if(!l1&&!l2)
{
break;
}
else{
printf(" ");
}
}
while(l1)
{
printf("%d %d",l1->xi,l1->zhi);
l1=l1->next;
if(l1)
{
printf(" ");
}
}
while(l2)
{
printf("%d %d",l2->xi,l2->zhi);
l2=l2->next;
if(l2)
{
printf(" ");
}
}
}
int main()
{
int n1;
int n2;
List l1=creat();
List l2=creat();
scanf("%d",&n1);
int i=0;
List tmp=l1;
for(i=0;i<n1;i++)
{
tmp->next=creat();
tmp=tmp->next;
scanf("%d",&tmp->xi);
scanf("%d",&tmp->zhi);
}
scanf("%d",&n2);
i=0;
tmp=l2;
for(i=0;i<n2;i++)
{
tmp->next=creat();
tmp=tmp->next;
scanf("%d",&tmp->xi);
scanf("%d",&tmp->zhi);
}
List h=muti(l1,l2);
output(h);
Add(l1,l2);
system("pause");
}
亿点错误: