Adding two polynomials using Linked List in Java

2025年3月27日 | 阅读 9 分钟

使用链表表示两个多项式。为了对具有相同变量幂的系数求和,请编写一个函数来添加这些列表。

Adding two polynomials using Linked List in Java

示例 1

输入

int num1 = 7x4 + 4x3 + 6x2 + 1x0

int num2 = 6x1 + 4x0

输出

相加两个多项式后的结果是 7x4 + 4x3 + 6x2 + 6x1 +5x0

示例 2

输入

int num1 = 5x2 + 4x1 + 2x0

int num2 = -5x1 - 5x0

输出

相加两个多项式后的结果是 5x2- 1x1 - 3x0

示例 3

输入

int num1 = 5x3 + 3x2 + x0

int num2 = 5x1 - 4x0

输出

相加两个多项式后的结果是 5x3 + 3x2 + 5x1 - 3x0

方法:朴素方法

通过这个 Java 程序添加表示两个多项式的链表。多项式中每个项的系数和幂都存储在链表的一个节点中。PolynomialAddition 类有一个名为 polynomial 的方法,该方法通过遍历两个输入多项式 ptr1 和 ptr2 的节点来添加具有相同幂的等效项。如果幂不同,则具有较大幂的项将直接添加到结果中。结果是一个新的链表。使用加法 函数,在主过程中构建两个多项式,并打印出结果多项式。

算法

步骤 1: 为两个多项式创建链表,每个系数及其对应的幂都包含一个节点。

步骤 2: 从两个多项式的链表头部开始。

步骤 3: 分析两个多项式中当前项的幂。

步骤 3.1: 如果幂相等,则将它们的系数相加,并将一个新节点添加到结果列表中。

步骤 3.2: 如果一个多项式的幂大于另一个,则将其项直接添加到结果列表中。

步骤 4: 如果一个多项式先于另一个结束,则应将另一个多项式的剩余项直接添加到结果列表中。

步骤 5: 打印多项式中的每个项(系数和幂),然后遍历结果链表。

实施

文件名: LinkedListAddingPolynomials.java

输出

 
The result after adding two polynomials is 
5x^3 + 3x^2 + 5x^1 + -3x^0   

复杂度分析

时间复杂度为 O(m + n),其中 m 和 n 分别表示第一个和第二个列表中的节点数。空间复杂度为 O(m+n),因为两个多项式相加的结果存储在一个大小为 m + n 的新链表中。

朴素方法的简洁版本

为了访问结果链表的最后一个节点,我们将跟踪一个前一个 指针。除了生成新节点外,我们还将修改现有的节点。PolynomialAddition 遍历两个链表以执行加法,而 append 方法则将项添加到多项式中。打印包含结果的多项式表达式。为了动态处理具有不同次数的多项式项,使用了链表。

算法

步骤 1: 为第一个和第二个多项式中的每个项创建节点(幂,系数)。

步骤 2: 创建一个虚拟节点以保存结果。

步骤 3: 使用两个多项式的链表形式遍历它们并比较项的幂。

步骤 3.1: 如果幂相等,则将系数相加。

步骤 3.2: 如果一个多项式的幂更大,则将其项直接添加到结果中。

步骤 4: 如果一个多项式处理完毕但另一个多项式仍未完成,则将剩余的项添加到结果中。

步骤 5: 导航结果链表后,打印多项式表达式。

实施

文件名: ConciseAddingPolynomials.java

输出

 
The result after adding two polynomials is 
5x^3 + 3x^2 + 5x^1 + -3x^0   

复杂度分析

时间复杂度为 O(m + n),其中 m 和 n 分别表示第一个和第二个列表中的节点数。空间复杂度为 O(1)。

方法:递归方法

上面的代码中使用链表结构来进行多项式加法。每个多项式项的系数和幂都存储在一个代表该项的节点中。使用 PolynomialAddition 技术,递归地比较两个多项式的项。当两个项具有相同的幂时,在将它们的系数相加后显示结果。剩余的项按顺序打印,具有较高幂的多项式项先打印。使用 insert 方法将一个新项添加到链表中,而 printList 方法通过适当的格式确保有利项以可读的格式显示多项式。

实施

文件名: AdditionPolynomial.java

输出

 
The polynomial is: 
5x^3 + 3x^2 + 1x^0 
The polynomial is: 
5x^1 -4x^0 
The result is given by: 
+ 5x^3 + 3x^2 + 5x^1 -3x^0   

复杂度分析

时间复杂度为 O(m + n),空间复杂度为 O(m + n),其中 m 和 n 分别表示第一个和第二个列表中的节点数。


下一个主题Java 中的组合