【问题标题】:Polynomial Calculator using Linked List使用链表的多项式计算器
【发布时间】:2018-09-22 02:30:37
【问题描述】:

我正在做一个多项式计算器项目,我正在做第一部分。多项式将以特定格式表示,其中两个多项式是表示系数和指数的整数序列。这是一个例子。

4 3 -2 2 6 1
6 3 5 2 3 1

多项式 1 = 4x^3 - 2x^2 + 6x 和多项式 2 = 6x^3 + 5x^2 + 3x 我应该使用链表来实现这一点。 这是我的class Node 代码:

class Node {
    int coef;
    int power;
    Node next;
    public Node(int coef, int power) {
        this.coef = coef;
        this.power = power;
    }
}

如何有效地分离系数和指数并添加到链接列表? 这是我推送新多项式节点的代码:

void addPoly(int coef, int pow) {
    Node newNode = new Node(coef, pow);
    if (head == null) {
        head = newNode;
        head.next = null;
    } else {
        Node curr = head;
        while (curr.next != null) {
            curr = curr.next;
        }
        curr.next = newNode;
    }
}

谢谢!

【问题讨论】:

  • 对我来说看起来不错。有什么问题?
  • 你认为我先删除所有空白是个好主意,然后在 for 循环中 addPoly() ,其中第一个系数是 chartAt(0),下一个系数是为 0+2 等等(与指数相同,但 charAt(1))?
  • @C0DeX 你真的得到ints 和charAt 吗?如果你有像你的例子这样的负值,这将不起作用
  • 如果您的列表总是有序的,您可以向后循环(从 ^1 开始),这样您就不必总是遍历列表的末尾。
  • 如果所有数字都是个位数,那么去除空格就可以了。但如果你有13 12 11 10 之类的东西,它就无法与1 3 1 2 1 1 1 0 区分开来

标签: java linked-list


【解决方案1】:

您可以拆分输入,然后将每个结果字符串转换为整数。如果功率始终按递减顺序排列,则向后循环以降低代码复杂度。

String s = "4 3 -2 2 6 1";
int[] values = Arrays.stream(s.split(" "))
    .mapToInt(Integer::valueOf)
    .toArray();
assert values.length % 2 == 0;
for (int i = values.length - 1; i > 0; i = i - 2) {
    int coeff = values[i - 1];
    int power = values[i];
    addPoly(coeff, power);
}

addPoly 可以简化为

void addPoly(int coeff, int power) {
    Node node = new Node(coeff, power);
    node.next = head;
    head = node;
}

在第一次迭代时,headnull,所以第一个节点成为列表的末尾。每个下一步都是前身。所以headnext。最后但并非最不重要的一点是,新节点成为下一个head

【讨论】:

  • head 应该是第一个元素,而不是最后一个。
【解决方案2】:

Java-9 解决方案,使用带有两个捕获组和一个 MatchResults stream 的正则表达式 Pattern

String input = "4 3 -2 2 6 1";
Pattern p = Pattern.compile("\\s*(-?\\d+)\\s+(-?\\d+)");
// add all the polynomials to myList
p.matcher(input).results().forEach(m -> myList.addPoly(m.group(1), m.group(2));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多