You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于链表的多项式乘法方法实现技术求助

多项式链表乘法:你的代码问题与修复方案

嘿,我看你正在尝试用链表实现多项式乘法功能,当前的代码确实存在几个关键问题,导致它没法正常工作。让我一步步帮你梳理并修正:

你的代码里的核心问题

  • 结果链表的链接逻辑完全错误:你每次创建新的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:04:26