基于链表的多项式乘法方法实现技术求助
多项式链表乘法:你的代码问题与修复方案
嘿,我看你正在尝试用链表实现多项式乘法功能,当前的代码确实存在几个关键问题,导致它没法正常工作。让我一步步帮你梳理并修正:
你的代码里的核心问题
- 结果链表的链接逻辑完全错误:你每次创建新的
PolyNode后,直接把temp赋值为这个新节点的next(也就是null),这意味着之前的节点全部丢失,根本没把新节点挂载到结果链表上。 second指针未重置:内层循环跑完一轮后,second已经走到链表末尾变成null,下一次外层循环时,内层循环会直接跳过,无法处理第一个多项式的后续节点。first指针未前进:外层循环里没有写first = first.next,这会导致无限循环卡在第一个节点上。- 缺少同类项合并:多项式乘法后必然会产生同幂次的项,你现在只是简单生成新节点,没有把相同幂次的系数相加,结果会是一堆零散的节点,不符合多项式的规范要求。
修复后的完整代码实现
下面是修正后的代码,我加了详细注释,方便你理解:
private PolyNode multiply(PolyNode first, PolyNode second) { // 用哑节点(dummy node)简化结果链表的头节点处理,避免空指针麻烦 PolyNode dummy = new PolyNode(0, 0); PolyNode resTail = dummy; // 先保存第二个多项式的头节点,方便每次内层循环重置指针 PolyNode secondHead = second; while (first != null) { // 处理第一个多项式的当前节点时,把second重置回链表开头 second = secondHead; while (second != null) { // 计算相乘后的系数和幂次 int newCoef = first.coef * second.coef; int newPower = first.power + second.power; // 遍历结果链表,查找是否已有相同幂次的节点 PolyNode current = dummy; boolean foundSamePower = false; while (current.next != null) { if (current.next.power == newPower) { // 找到同类项,直接累加系数 current.next.coef += newCoef; foundSamePower = true; break; } current = current.next; } if (!foundSamePower) { // 未找到同类项,创建新节点并添加到结果链表末尾 resTail.next = new PolyNode(newCoef, newPower); resTail = resTail.next; } // 移动到第二个多项式的下一个节点 second = second.next; } // 移动到第一个多项式的下一个节点 first = first.next; } // 哑节点的next就是结果链表的真正头节点 return dummy.next; }
额外的优化小建议
- 如果你的输入多项式是按幂次有序排列的(比如降序或升序),可以优化同类项的查找逻辑,不用每次都从头遍历结果链表,能大幅提升运算效率。
- 可以加上空输入判断:如果
first或者second是null,直接返回null或者空的哑节点,避免出现空指针异常。
内容的提问来源于stack exchange,提问作者C0DeX
相关产品推荐
相关产品推荐

