C++利用链表实现整系数多项式的加法Node* add_poly(Node* a, Node* b)。多项式a和b用链表表示,链表定义如下: struct Node { int order, coeff; // 次数 和 系数 Node* nxt; // 指向后一项的指针 } 多项式a和b保证每一项系数coeff都是整数,保证每一项次数order >= 0。输入order=-1表示输入结束。保证从链表的头到尾,次数递减
时间: 2024-02-13 10:03:09 浏览: 84
以下是实现多项式加法的代码:
```C++
Node* add_poly(Node* a, Node* b) {
Node* head = new Node(); // 新建一个链表头,作为结果链表
Node* tail = head; // 将尾指针指向链表头
while (a != nullptr && b != nullptr) { // 同时遍历a和b链表
if (a->order > b->order) { // 如果a当前项次数大于b当前项次数
tail->nxt = a; // 将a当前项加入结果链表
a = a->nxt; // a指向下一项
} else if (a->order < b->order) { // 如果a当前项次数小于b当前项次数
tail->nxt = b; // 将b当前项加入结果链表
b = b->nxt; // b指向下一项
} else { // 如果a和b当前项次数相等
int sum = a->coeff + b->coeff; // 系数相加
if (sum != 0) { // 如果系数和不为0
Node* node = new Node(); // 新建一个节点
node->order = a->order; // 节点次数等于a的当前项次数
node->coeff = sum; // 节点系数等于系数和
tail->nxt = node; // 将节点加入结果链表
tail = node; // 将尾指针指向节点
}
a = a->nxt; // a指向下一项
b = b->nxt; // b指向下一项
}
}
// 将剩余的项加入结果链表
if (a != nullptr) {
tail->nxt = a;
} else {
tail->nxt = b;
}
return head->nxt; // 返回结果链表的第一个节点
}
```
该函数首先新建一个链表头,作为结果链表,然后同时遍历a和b链表,根据当前项的次数进行比较,将当前项系数较大的加入结果链表,并将指针指向下一项。如果当前项次数相等,则将系数相加,如果系数和不为0,则新建一个节点加入结果链表,同时指针指向下一项。最后将剩余的项加入结果链表,返回结果链表的第一个节点。
阅读全文