今年夏天,我正在重新编写一些程序,我在做这个问题,如下所示。 编写一个方法折叠,将一堆整数作为参数,然后通过用该对的总和替换每个连续的整数对来折叠它。
基本上,我的方法是返回堆栈的相反顺序,除非在堆栈中奇数个数字的情况下,否则我将至少为我返回总和,而不考虑顺序。 我应该只使用1个队列 我的问题是我在这里哪里出错了,为什么我不能总结我的两个流行音乐。 公共静态堆栈崩溃(Stack sO) {
Queue<Integer> qN = new LinkedList<Integer>();
int x1 = 0;
int x2 = 0;
while(!sO.empty())
{
qN.add(sO.pop());
}
while(!qN.isEmpty())
{
int sum = 0;
x1 = qN.remove();
if(sO.empty()){
qN.add(x1); break;
}
else{x2 = qN.remove();
sum = x1 + x2;
qN.add(sum);}
}
while(!qN.isEmpty()){
sO.push(qN.remove());
}
return sO;
底部[7,2,8,9,4,13,7,1,9,10]顶部 第一对应该折叠为9(7 + 2),第二对应该折叠为17(8 + 9),第三对应该折叠为17(4 + 13),依此类推:
底部[9、17、17、8、19]顶部
答案 0 :(得分:1)
这部分代码将是无限循环:
if(sO.empty()){
qN.add(x1); break;
}
您要从队列中删除x1,然后再次将其重新添加到队列中。
修改下段内容的方式
while(!qN.isEmpty())
{
x1=qN.remove();
x2=qN.remove();
sO.push(x1+x2);
}
请记住:如果元素数为奇数,则x2在上一次迭代中将为null。请当心。