Сложение полиномов с использованием связанных списков // Java

#java #data-structures #linked-list #polynomials #polynomial-math

#java #структуры данных #связанный список #многочлены #многочлен-математика

Вопрос:

У меня есть назначение для моего класса структур данных. В задании мы должны реализовать сложение полиномов с использованием связанных списков. Я думаю, что у меня это не работает, но eclipse выдает мне исключение с нулевым указателем. Моя проблема связана с методом add, хотя я включил весь класс для контекста. Умножением я займусь после.. Пожалуйста, помогите.

 class PolynomialLinkedList{
private static class PNode{
    private int coe;
    private int exp;
    private PNode next;
    public PNode(int c, int e){
        this(c, e, null);
    }
    public PNode(int c, int e, PNode n){
        coe = c;
        exp = e;
        next = n;
    }
    public void setCoe(int c){ coe = c;}
    public void setExp(int e){ exp = e;}
    public void setNext(PNode n){ next = n;}
    public int getCoe(){ return coe;}
    public int getExp(){ return exp;}
    public PNode getNext(){ return next;}
}
private PNode first;
private PNode last;
    public PolynomialLinkedList(){
        first = last = null;
    }
    public PolynomialLinkedList(int c, int e){
        PNode tempn = new PNode(c, e);
        first = last = tempn;
    }
    public void print(){
        if (first == null){
            System.out.println();
            return;
        }
        PNode temp = first;
        String ans = "";
        while (temp != null){
            if (temp.getCoe() > 0) {
                if (temp != first) ans = ans   "   ";
                ans = ans   temp.getCoe();
            }
            else if (temp.getCoe() < 0) ans = ans   " - "   temp.getCoe() * -1;
            if (temp.getExp() != 0){
                ans = ans   "X^"   temp.getExp();
            }
            temp = temp.getNext();
        }
        System.out.println(ans);
    }
    public PolynomialLinkedList add(PolynomialLinkedList s){
        PolynomialLinkedList sum = new PolynomialLinkedList();
        PNode temp1 = this.first;
        PNode temp2 = s.first;
        PNode tempAns = new PNode(0,0);
        if(temp1.exp != temp2.exp) {
            while(temp1.exp > temp2.exp) {
                tempAns.setCoe(temp1.coe);
                tempAns.setExp(temp1.exp);
                temp1 = temp1.getNext();
                tempAns = sum.first.getNext();
            }
            while(temp1.exp < temp2.exp) {
                tempAns.setCoe(temp2.coe);
                tempAns.setExp(temp2.exp);
                temp2 = temp2.getNext();
                tempAns = sum.first.getNext();  
            }
        }
        else if(temp1.exp == temp2.exp) {
            while(temp1.exp == temp2.exp) {
                tempAns.setCoe((temp1.coe   temp2.coe));
                tempAns.setExp(temp1.exp);
                temp1 = temp1.getNext();
                temp2 = temp2.getNext();
                tempAns = sum.first.getNext();
            }
        }
        return sum;
    }
    public PolynomialLinkedList multiply(PolynomialLinkedList s){
        PolynomialLinkedList product = new PolynomialLinkedList();
        //implement this method
        return product;
    }
  

}

Комментарии:

1. Вы должны попытаться использовать встроенный в LinkedList качестве первого шага улучшения, если вам нужно использовать связанный список, как вы упомянули. LinkedList<PNode> PNode содержит 2 свойства coe и exp поможет сократить объем реализации / логики вокруг связанного списка, вам нужно будет только управлять своей пользовательской логикой.

2. Пожалуйста, отредактируйте свой вопрос с подробностями NullPointerException . Пожалуйста, добавьте трассировку стека и набор входных данных, для которых вы получаете NullPointerException .