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

多项式同类项合并实现方案咨询(优先C++/Java示例)

用链表实现多项式同类项合并的解决方案

当然可以用链表来实现这个需求!作为自学编程练手的经典场景,链表非常适合用来处理多项式这类需要动态添加、合并元素的结构。针对你给出的例子,我会先讲清实现思路,再给出C++和Java的示例代码。

核心思路

要完成多项式合并,我们需要:

  • 用链表节点存储每个多项式项的系数和指数,每个节点代表一个项(比如5x²对应系数5,指数2)
  • 处理输入序列时,每两个数字为一组(系数+指数),生成对应的项节点
  • 合并同类项:要么在插入节点时就检查是否已有相同指数的项,直接累加系数;要么先把所有项插入链表,再遍历合并相同指数的项(前者效率更高)

C++ 实现示例

1. 定义链表节点结构

首先我们定义一个Node结构体,用来存储每个项的系数、指数,以及指向下一个节点的指针:

#include <iostream>
using namespace std;

struct Node {
    int coeff;   // 系数
    int exp;     // 指数
    Node* next;  // 下一个节点指针

    // 构造函数
    Node(int c, int e) : coeff(c), exp(e), next(nullptr) {}
};

2. 多项式合并逻辑

我们写一个函数,负责将新项插入链表时直接合并同类项:

// 插入项并合并同类项
void insertNode(Node*& head, int coeff, int exp) {
    // 如果链表为空,直接作为头节点
    if (head == nullptr) {
        head = new Node(coeff, exp);
        return;
    }

    Node* current = head;
    Node* prev = nullptr;

    // 查找是否有相同指数的项
    while (current != nullptr) {
        if (current->exp == exp) {
            // 同类项,系数相加
            current->coeff += coeff;
            return;
        }
        prev = current;
        current = current->next;
    }

    // 没有找到同类项,添加到链表末尾
    prev->next = new Node(coeff, exp);
}

// 打印合并后的多项式
void printPolynomial(Node* head) {
    if (head == nullptr) {
        cout << "0" << endl;
        return;
    }

    Node* current = head;
    while (current != nullptr) {
        // 处理系数和符号
        if (current != head && current->coeff > 0) {
            cout << "+";
        }
        cout << current->coeff << "x^" << current->exp;
        current = current->next;
    }
    cout << endl;
}

3. 测试你的示例

用你给出的输入序列来测试:

int main() {
    // 输入序列:1 2 2 4 3 6 4 2 5 4
    int arr[] = {1,2, 2,4, 3,6, 4,2, 5,4};
    int n = sizeof(arr)/sizeof(arr[0]);

    Node* head = nullptr;

    // 每两个元素为一组,插入链表
    for (int i = 0; i < n; i += 2) {
        insertNode(head, arr[i], arr[i+1]);
    }

    cout << "合并后的多项式:";
    printPolynomial(head);

    // 释放内存(避免内存泄漏)
    Node* temp;
    while (head != nullptr) {
        temp = head;
        head = head->next;
        delete temp;
    }

    return 0;
}

运行这段代码,输出就是:合并后的多项式:5x^2+6x^4+3x^6,完全符合你的需求。


Java 实现示例

如果更熟悉Java,这里是对应的实现:

1. 定义链表节点类

class Node {
    int coeff;
    int exp;
    Node next;

    public Node(int coeff, int exp) {
        this.coeff = coeff;
        this.exp = exp;
        this.next = null;
    }
}

2. 多项式处理类

public class PolynomialMerge {
    private Node head;

    public PolynomialMerge() {
        this.head = null;
    }

    // 插入项并合并同类项
    public void insert(int coeff, int exp) {
        if (head == null) {
            head = new Node(coeff, exp);
            return;
        }

        Node current = head;
        Node prev = null;

        while (current != null) {
            if (current.exp == exp) {
                current.coeff += coeff;
                return;
            }
            prev = current;
            current = current.next;
        }

        prev.next = new Node(coeff, exp);
    }

    // 打印多项式
    public void printPolynomial() {
        if (head == null) {
            System.out.println("0");
            return;
        }

        Node current = head;
        while (current != null) {
            if (current != head && current.coeff > 0) {
                System.out.print("+");
            }
            System.out.print(current.coeff + "x^" + current.exp);
            current = current.next;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // 输入序列:1 2 2 4 3 6 4 2 5 4
        int[] arr = {1,2, 2,4, 3,6, 4,2, 5,4};
        PolynomialMerge poly = new PolynomialMerge();

        for (int i = 0; i < arr.length; i += 2) {
            poly.insert(arr[i], arr[i+1]);
        }

        System.out.print("合并后的多项式:");
        poly.printPolynomial();
    }
}

运行这段Java代码,同样会输出正确的合并结果。


额外说明

  • 上面的实现是在插入时就合并同类项,效率比先插入所有项再遍历合并更高,因为避免了二次遍历
  • 如果需要按指数从高到低或低到高排序,可以在插入时调整节点位置,让链表保持有序(比如插入时找到合适的位置,而不是直接放到末尾)
  • 记得在C++中手动释放内存,避免内存泄漏;Java则由垃圾回收机制自动处理

内容的提问来源于stack exchange,提问作者Kim James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:42:52