假定存储两多项式的带头节点的单链表Ha、Hb已经建立好写出实现两多项式相加的完整算法
- 定义三个指针:p、q和r,分别指向链表Ha、Hb和Hc(用于存放相加后的多项式)
- 初始化p和q为链表Ha和Hb的首元节点,r为Hc的带头节点
- 当p和q均未到达链表末尾时,执行以下循环:
- 如果p的指数小于q的指数,则将p的节点复制到Hc中,同时更新p和r的指针
- 如果q的指数小于p的指数,则将q的节点复制到Hc中,同时更新q和r的指针
- 如果p和q的指数相等,则将它们的系数相加,并将结果复制到Hc中,同时更新p、q和r的指针
- 如果p或q到达链表末尾,则将另一个链表的剩余节点依次复制到Hc中
- 返回Hc的带头节点
完整算法实现如下:
Node* addPoly(Node* Ha, Node* Hb) {
Node* p = Ha->next;
Node* q = Hb->next;
Node* r = new Node; // Hc的带头节点
Node* s = r; // s用于遍历Hc
while (p != nullptr && q != nullptr) {
if (p->expn < q->expn) {
s->next = new Node(p->coef, p->expn);
p = p->next;
} else if (p->expn > q->expn) {
s->next = new Node(q->coef, q->expn);
q = q->next;
} else {
s->next = new Node(p->coef + q->coef, p->expn);
p = p->next;
q = q->next;
}
s = s->next;
}
while (p != nullptr) {
s->next = new Node(p->coef, p->expn);
p = p->next;
s = s->next;
}
while (q != nullptr) {
s->next = new Node(q->coef, q->expn);
q = q->next;
s = s->next;
}
return r;
}
原文地址: https://www.cveoy.top/t/topic/bgC2 著作权归作者所有。请勿转载和采集!