用圆形LinkedList简化相同功率多项式参数的系数

时间:2015-06-02 09:01:47

标签: java circular-list

此方法按顺序设置多项式的系数和指数值 它工作正常。 (val = coeff和val2 = exp)

public void setCoef(int val, int val2){

    Node nptr = new Node(val, val2, null, null);
    Node tmp, ptr;
    boolean ins = false;

    if (start == null)
    {
        nptr.setLinkNext(nptr);
        nptr.setLinkPrev(nptr);

        start = nptr;
        end = start;
    }
    else if (val2 >= start.getData2())
    {
        nptr.setLinkPrev(end);
        end.setLinkNext(nptr);

        start.setLinkPrev(nptr);
        nptr.setLinkNext(start);

        start = nptr;
    }
    else if (val2 <= end.getData2())
    {
        end.setLinkNext(nptr);

        nptr.setLinkPrev(end);
        nptr.setLinkNext(start);

        start.setLinkPrev(nptr);

        end = nptr;
    }
    else
    {
        tmp = start;
        ptr = start.getLinkNext();

        while (ptr != null)
        {
            if (val2 <= tmp.getData2() && val2 >= ptr.getData2())
            {
                tmp.setLinkNext(nptr);
                nptr.setLinkPrev(tmp);
                nptr.setLinkNext(ptr);

                ptr.setLinkPrev(nptr);
                ins = true;

                break;
            }
            else
            {
                tmp = ptr;
                ptr = ptr.getLinkNext();
            }
        }
        if (!ins)
        {
            tmp.setLinkNext(nptr);
            nptr.setLinkPrev(tmp);
        }
    }
    size++;
}

在这个例子中,我无法弄清楚如何在不破坏顺序的情况下将 2x ^ 3 + 5x ^ 3节点简化为一个节点7x ^ 3

p1.setCoef(2, 3);
p1.setCoef(5, 3);

此示例应为5x ^ 8 + 5x ^ 7 + 5x ^ 6。

p1.setCoef(3, 6);
p1.setCoef(5, 7);
p1.setCoef(2, 6);
p1.setCoef(5, 8);

我的toString方法也没有问题。

等待你的帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

最好使用TreeMap而不是Circular LinkedList。

public class Polynomial {

    private final TreeMap<Integer, Integer> map = new TreeMap<>();

    public void setCoef(int coeff, int exp) {
        Integer oldCoeff = map.get(exp);
        if (oldCoeff == null) oldCoeff = 0;
        map.put(exp, oldCoeff + coeff);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Entry<Integer, Integer> e : map.descendingMap().entrySet())
            sb.append("+").append(e.getValue()).append("x^").append(e.getKey());
        return sb.substring(1);
    }

    public static void main(String[] args) {
        Polynomial p1 = new Polynomial();
        p1.setCoef(3, 6);
        p1.setCoef(5, 7);
        p1.setCoef(2, 6);
        p1.setCoef(5, 8);
        System.out.println(p1); // -> 5x^8+5x^7+5x^6
    }
}