分析用c++单链表写一段代码把任意给定的两个一元多项式Px Qx 输入计算机计算它们的和并输出计算结果
假设一元多项式的表示形式为:
struct ListNode { int coefficient; // 系数 int exponent; // 指数 ListNode* next; // 指向下一个节点的指针 };
其中,每个节点代表一项多项式,包含一个系数和一个指数。next指针指向下一项的节点。
现在,我们可以通过以下代码实现对两个一元多项式的求和:
ListNode* addPolynomial(ListNode* p, ListNode* q) { ListNode* res = new ListNode(); // 用于存储结果的链表 ListNode* cur = res; // 指向结果链表的当前节点
while (p && q) { // 当两个多项式都还有节点时
if (p->exponent == q->exponent) { // 当指数相同时
int sum = p->coefficient + q->coefficient;
if (sum != 0) { // 如果系数和不为0,创建新节点
cur->next = new ListNode();
cur = cur->next;
cur->coefficient = sum;
cur->exponent = p->exponent;
}
p = p->next; // 指向下一个节点
q = q->next;
} else if (p->exponent > q->exponent) { // 当p的指数大于q的指数时
cur->next = new ListNode(); // 创建新节点
cur = cur->next;
cur->coefficient = p->coefficient;
cur->exponent = p->exponent;
p = p->next; // 指向下一个节点
} else { // 当p的指数小于q的指数时
cur->next = new ListNode(); // 创建新节点
cur = cur->next;
cur->coefficient = q->coefficient;
cur->exponent = q->exponent;
q = q->next; // 指向下一个节点
}
}
// 将剩余的节点添加到结果链表中
while (p) {
cur->next = new ListNode();
cur = cur->next;
cur->coefficient = p->coefficient;
cur->exponent = p->exponent;
p = p->next;
}
while (q) {
cur->next = new ListNode();
cur = cur->next;
cur->coefficient = q->coefficient;
cur->exponent = q->exponent;
q = q->next;
}
return res->next; // 返回结果链表的头节点
}
在主函数中,我们可以手动构造两个多项式的链表,并调用addPolynomial函数进行求和操作:
int main() { // 构造多项式P(x) = 3x^3 + 2x^2 + x + 1 ListNode* p = new ListNode(); p->coefficient = 3; p->exponent = 3; p->next = new ListNode(); p = p->next; p->coefficient = 2; p->exponent = 2; p->next = new ListNode(); p = p->next; p->coefficient = 1; p->exponent = 1; p->next = new ListNode(); p = p->next; p->coefficient = 1; p->exponent = 0;
// 构造多项式Q(x) = 2x^4 + 3x^2 + 2
ListNode* q = new ListNode();
q->coefficient = 2;
q->exponent = 4;
q->next = new ListNode();
q = q->next;
q->coefficient = 3;
q->exponent = 2;
q->next = new ListNode();
q = q->next;
q->coefficient = 2;
q->exponent = 0;
// 求和并输出结果
ListNode* res = addPolynomial(p, q);
while (res) {
cout << res->coefficient << "x^" << res->exponent << " + ";
res = res->next;
}
cout << "0" << endl; // 输出最后的常数项0
return 0;
}
原文地址: https://www.cveoy.top/t/topic/bJoe 著作权归作者所有。请勿转载和采集!