多项式相加,链表

一条单链表可以表示一个一元多项式,每个节点包含三个域:指数、系数和后继节点(指针或引用)。
表示多项式3X4-6X2+5X-10的单链表如图所示。给定两个多项式,实现两个多项式相加算法。

 

输入格式

第一行输入包含两个整数m,n
后续为m行和n行数据
m,n分别代表两个多项式的项数
后续每一行代表多项式的项,包含a,b两个数据,表示该项的系数和指数。

输出格式

从较高指数到较低指数,依次输出求得的和。
每行一项,格式与输入相同,但无需输出项数,系数为0的项也不输出。

输入样例 复制

2 3

1 2

1 1

2 2

1 1

2 0

输出样例 复制

3 2

2 1

2 0

#include<bits/stdc++.h>
 
using namespace std;
 
typedef struct LNode
{
 int coef, expn;
 struct LNode* next;
}LNode, * LinkList;
 
LinkList ListInsert(int n)
{
 LinkList head, p, q, pre, tail;
 head = new LNode;
 head->next = NULL;
 tail = head;
 for (int i = 0; i < n; i++)
 {
  p = new LNode;
  cin >> p->coef >> p->expn;
  pre = head;
  q = head->next;
  while (q && q->expn > p->expn)
  {
   pre = q;
   q = q->next;
  }
  p->next = q;
  pre->next = p;
 }
 return head;
}
 
void Add(LinkList heada, LinkList headb)
{
 int sum;
 LinkList pa, pb, pc, r;
 pa = heada->next; 
 pb = headb->next; 
 pc = heada;
 
 while (pa && pb)
 {
  if (pa->expn == pb->expn)
  {
   sum = pa->coef + pb->coef;
   if (sum != 0)
   {
    pa->coef = sum;
    pc->next = pa; pc = pa;
    pa = pa->next;
    r = pb; pb = pb->next; delete r;
   }
   else
   {
    r = pa; pa = pa->next; delete r;
    r = pb; pb = pb->next; delete r;
   }
  }
  else if (pa->expn < pb->expn)
  {
   pc->next = pb;
   pc = pb;
   pb = pb->next;
  }
  else
  {
   pc->next = pa;
   pc = pa;
   pa = pa->next;
  }
 }
 pc->next = pa ? pa : pb;
}
 
void print(LinkList head)
{
 LinkList p;
 p = head->next;
 while (p != NULL)
 {
  cout << p->coef << " " << p->expn << endl;
  p = p->next;
 }
}
 
int main()
{
 LinkList heada, headb;
 int m, n;
 cin >> m >> n;
 heada = ListInsert(m);
 headb = ListInsert(n);
 Add(heada, headb);
 print(heada);
 return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值