C ++使用链表添加2多项式

问题描述 投票:0回答:1

这是我编写的代码,没有编译器错误,但无法正常工作。你能帮我修复一下吗

   class Polynomial {
    public:
        int coef;
        int pow;
        Polynomial* next;
        //Default Constructor
        Polynomial()
        {
            coef = 0;
            pow = 0;
            next = NULL;
        }

        Polynomial(int kat, int üssü)
        {
            coef = kat;
            pow = üssü;
            next = NULL;
        }

    };

    Polynomial* add(Polynomial* p1, Polynomial* p2) {
    Polynomial* add = new Polynomial;
    Polynomial* add2 = add;
    while (p1->next && p2->next) {
        if (p1->pow > p2->pow) {
            add->pow = p1->pow;
            add->coef = p1->coef;
            p1 = p1->next;
        }
        else if (p1->pow < p2->pow) {
            add->pow = p2->pow;
            add->coef = p2->coef;
            p2 = p2->next;
        }
        else {
            add->pow = p1->pow;
            add->coef = (p1->coef + p2->coef);
            p1 = p1->next;
            p2 = p2->next;
        }
        add->next = new Polynomial;
        add = add->next;
        add->next = NULL;
    }

    while (p1->next || p2->next ) {

        if (p1->next) {
            add->coef = p1->coef;
            add->pow = p1->pow;
            p1 = p1->next;
        }
        if (p2->next) {
            add->coef = p2->coef;
            add->pow = p2->pow;
            p2 = p2->next;
        }

        add->next = new Polynomial;
        add = add->next;
        add->next = NULL;
    }
    return add2;
    }

例如,当我尝试将这两个策略相加时,结果为2x ^ 2 + 1x ^ 2 = 0x ^ 0

3x ^ 5 + 2x ^ 3 + 2x ^ 24x ^ 4 + 3x ^ 3 + 1x ^ 2+ __________________3x ^ 5 + 4x ^ 4 + 5x ^ 3 + 0x ^ 0 +If you want to see console output

c++ polynomials nodelist
1个回答
0
投票

几个问题。

1)您错过了每个多项式的最后一项,因为

while (p1->next && p2->next) 

应该是

while (p1 && p2) 

while (p1->next || p2->next) 

应该是

while (p1 || p2) 

这就是为什么您在输出中看不到3x^3的原因。

2)在将一个节点添加到新多项式之前,您知道需要添加一个。这就是为什么您在输出中看到0x^0的原因。

您可以这样更改循环

Polynomial* add(Polynomial* p1, Polynomial* p2) {
    Polynomial* add2 = NULL;
    while (p1 && p2) {
        Polynomial* add = new Polynomial;
        ...
        add->next = NULL;
        if (add2 == NULL)
            add2 = add;
    }

    while (p1 || p2) {
        Polynomial* add = new Polynomial;
        ...
        add->next = NULL;
        if (add2 == NULL)
            add2 = add;
    }
    return add2;
}

未经测试的代码。

© www.soinside.com 2019 - 2024. All rights reserved.