此方法按顺序设置多项式的系数和指数值 它工作正常。 (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方法也没有问题。
等待你的帮助,提前谢谢!
答案 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
}
}