多项式导数处理指数为0

Polynomial Derivative handling exponent of 0

我有一个方法接受多项式 Linked List 作为参数和 returns 一个新列表,它是多项式的导数。

这是我的:

private PolyNode derivative(PolyNode poly) {
    PolyNode temp = new PolyNode(0, 0);
    PolyNode res = temp;

    // While both Lists are not empty
    while (poly != null) {
        if (poly.power > 0) {
            temp.next = new PolyNode(poly.coef * poly.power, poly.power - 1);
            temp = temp.next;
            poly = poly.next;
        }
    }
    // Return new List, the result polynomial
    return res.next;
}

当我 运行 程序时,它从未完成编译并部分 returns 列表;只有幂高于 0 的项。 我尝试添加

if (poly.power == 0) {
    temp.next = new PolyNode(0,0);
    temp = temp.next;
    poly = poly.next;
}

但这似乎不起作用。有什么想法吗?

仔细观察您的 while 循环:

// While both Lists are not empty
while (poly != null) {
    if (poly.power > 0) {
        temp.next = new PolyNode(poly.coef * poly.power, poly.power - 1);
        temp = temp.next;
        poly = poly.next;
    }
}

poly 不会改变,除非它的 power 大于零。因此,当找到带有 0 powerpoly 时,您的循环就会卡住。

改为:

while (poly != null) {
    if (poly.power > 0) {
        temp.next = new PolyNode(poly.coef * poly.power, poly.power - 1);
        temp = temp.next;
    }
    poly = poly.next;
}

通过这种方式,您可以有效地丢弃任何常量 (power == 0),同时仍然循环遍历 poly 列表。