1. 定义三个指针:p、q和r,分别指向链表Ha、Hb和Hc(用于存放相加后的多项式)
  2. 初始化p和q为链表Ha和Hb的首元节点,r为Hc的带头节点
  3. 当p和q均未到达链表末尾时,执行以下循环:
    1. 如果p的指数小于q的指数,则将p的节点复制到Hc中,同时更新p和r的指针
    2. 如果q的指数小于p的指数,则将q的节点复制到Hc中,同时更新q和r的指针
    3. 如果p和q的指数相等,则将它们的系数相加,并将结果复制到Hc中,同时更新p、q和r的指针
  4. 如果p或q到达链表末尾,则将另一个链表的剩余节点依次复制到Hc中
  5. 返回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;
}
假定存储两多项式的带头节点的单链表Ha、Hb已经建立好写出实现两多项式相加的完整算法

原文地址: https://www.cveoy.top/t/topic/bgC2 著作权归作者所有。请勿转载和采集!

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