上课布置的作业中只有思路和注释,具体下载地址见之前博客中的数据结构课程资源,这里给出解答
public static SeqList polyAdd(SeqList list1, SeqList list2) {
//result存放结果
SeqList result = new SeqList();
//pos1指向当前list1元素的位置,这个位置会不断变化,初始值为1,pos2则指向当前list2元素的位置
int pos1 = 1, pos2 = 1;
int len1 = list1.getLength();
int len2 = list2.getLength();
//还有用到其他变量,在这里声明这些变量,你意识到要用到这些变量时再来声明
PElem e1, e2, e3;
int exp1, exp2;
while (pos1 <= len1 && pos2 <= len2) {
//e3为要放置在result中的新项,该项目前的系数和幂都是默认值0
e3 = new PElem();
//取出list1中第pos1个元素出来,赋值给e1,取出list2中第pos2个元素出来,赋值给e2
e1 = (PElem) list1.getElement(pos1);
e2 = (PElem) list2.getElement(pos2);
//取出e1中的幂,e2中的幂,来作比较
exp1 = e1.getExp();
exp2 = e2.getExp();
//如果e1的幂>e2的幂,则将e1中的系数和幂分别赋值给e3中的系数和幂,且pos1++,即指向后一个位置,并且将e3添加(调用add)到result中
//如果e1的幂<e2的幂,则将e2中的系数和幂分别赋值给e3中的系数和幂,且pos2++,即指向后一个位置,并且将e3添加(调用add)到result中
//如果e1的幂==e2的幂,则将e1中的系数加上e2的系数赋值给e3中的系数,e1的幂赋值给e3的幂,且pos1++,pos2++,即都指向后一个位置,并且将e3添加(调用add)到result中
if (exp1 > exp2) {
e3.setCoefficent(e1.getCoefficent());
e3.setExp(exp1);
pos1++;
} else if (exp1 == exp2) {
e3.setCoefficent(e1.getCoefficent() + e2.getCoefficent());
e3.setExp(exp1);
pos1++;
pos2++;
} else {
e3.setCoefficent(e2.getCoefficent());
e3.setExp(exp2);
pos2++;
}
result.add(e3);
}
while (pos1 <= len1) { //意味着list1还没有结束,那么将list1剩余各项的系数和幂赋值到到e3项中,并且将e3添加(调用add)到result中
e3 = new PElem();
e1 = (PElem) list1.getElement(pos1);
e3.setCoefficent(e1.getCoefficent());
e3.setExp(e1.getExp());
result.add(e3);
pos1++;
}
while (pos2 <= len2) {//意味着list2还没有结束,那么将list2剩余各项的系数和幂赋值到到e3项中,并且将e3添加(调用add)到result中
e3 = new PElem();
e2 = (PElem) list2.getElement(pos2);
e3.setCoefficent(e2.getCoefficent());
e3.setExp(e2.getExp());
result.add(e3);
pos2++;
}
return result;
}