#include
#include
using namespace std;
typedef struct linkednode
{
int data[2];
struct linkednode *next;
} snode,*ptr;
int main()
{
ptr creat();
ptr add_n(ptr ha,ptr hb);
ptr p=NULL,q=NULL;
cout<<"请按照次数递增输入次数与系数"<<endl;
p=creat( );
q=creat( );
cout<<"111"<<endl;
while(p->next!=NULL)
{
cout<<p->data[0]<<" "<<p->data[1]<<"%%";
p=p->next;
}
while(q->next!=NULL)
{
cout<<q->data[0]<<" "<<q->data[1]<<"%%";
q=q->next;
}
p=add_n(p,q);
while(p->next!=NULL)
{
cout<<p->data[0]<<" "<<p->data[1]<<"%%";
p=p->next;
}
free(p);
free(q);
return 0;
}
ptr creat( )
{
ptr a=NULL,head=NULL,tail=NULL;
int x,c,i;
char flag='T';
tail=(ptr)malloc(sizeof(snode));
head=tail;
for( i=0;; i++)
{
cout<<"请输入次数"<<endl;
cin>>c;
cout<<"请输入系数"<<endl;
cin>>x;
a=(ptr)malloc(sizeof(snode));
tail->next=a;
tail->data[0]=c;
tail->data[1]=x;
tail=a;
cout<<"请选择是否继续输入,T为继续,F为终止"<<endl;
cin>>flag;
if(flag=='F')
break;
}
tail->next=NULL;
free(tail);
free(a);
return head;
}
ptr add_n(ptr ha,ptr hb)
{
ptr p,q,last_p,pre_q;
int val;
p=ha->next;
q=hb->next;
last_p=ha;
pre_q=hb;
while(p!=ha && q!=hb)
{
if(p->data[0]>q->data[0])
{
pre_q->next=q->next;
last_p->next=q;
q->next=p;
last_p=last_p->next;
q=pre_q->next;
}
else
{
if(p->data[0]<q->data[0]) //第二种情况
{
last_p=p;
p=p->next;
}
else //第三种,指数相同的合并
{
val=p->data[1]+q->data[1];
if(val!=0)//插入一个,删除一个
{
p->data[1]=val;
pre_q->next=q->next;
free(q);
last_p=p;
p=p->next;
q=pre_q->next;
}
else//删除系数相加后为0的结点
{
last_p->next=p->next;
pre_q->next=q->next;
free(p);
free(q);
p=last_p->next;
q=pre_q->next;
}
}
}
if(q!=hb) //插入hb中剩余的链表
{
last_p->next=q;
while (q->next!=hb)
q=q->next;
q->next=p;
}
free(hb);//释放hb表头监督元
}
return ha;
}