一元多项式加法 链表
没啥好说的,写一下指针练一练,用指针挺容易出错的细节挺多
#include<bits/stdc++.h>
#define ULL unsigned long long
#define DB double
#define LL long long
using namespace std;
int n,m,i,j;
struct QNode
{
int shu,ci;
QNode* nt;
}*headA,*headB,*tailA,*tailB,*headAns,*tailAns;
void InitQ(QNode *&b,QNode *&e)
{
b=e=new QNode;
b->nt=e->nt=NULL;
}
void ru(QNode *&l,int shu,int ci)
{
QNode *p=new QNode;
p->shu=shu;p->ci=ci;p->nt=NULL;
l->nt=p;l=p;
}
int main()
{
cin>>n>>m;
InitQ(headA,tailA);InitQ(headB,tailB);InitQ(headAns,tailAns);
for(int i=1,shu,ci;i<=n;++i)scanf("%d%d",&shu,&ci),ru(tailA,shu,ci);
for(int i=1,shu,ci;i<=m;++i)scanf("%d%d",&shu,&ci),ru(tailB,shu,ci);
i=j=1;
headA=headA->nt;headB=headB->nt;
while(headA!=NULL&&headB!=NULL)
{
if(headA->ci==headB->ci)ru(tailAns,headA->shu+headB->shu,headA->ci),headA=headA->nt,headB=headB->nt;
else if(headA->ci<headB->ci)ru(tailAns,headA->shu,headA->ci),headA=headA->nt;
else ru(tailAns,headB->shu,headB->ci),headB=headB->nt;
}
while(headA!=NULL)ru(tailAns,headA->shu,headA->ci),headA=headA->nt;
while(headB!=NULL)ru(tailAns,headB->shu,headB->ci),headB=headB->nt;
headAns=headAns->nt;
while(headAns!=NULL)
{
if(headAns->shu)printf("%d %d\n",headAns->shu,headAns->ci);
headAns=headAns->nt;
}
return 0;
}