假设一元多项式的表示形式为:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录