java - 有没有办法从堆栈底部反转后半部分元素(使用递归)?
问题描述
然而,有助于反转整个堆栈的代码无法让它反转一半的元素 -
static void reverseSecondHalf(Stack<Integer> stack) {
// Write your code here
if(stack.size() > 0)
{
int x = stack.peek();
stack.pop();
reverseSecondHalf(stack);
insert_at_bottom(x,stack);}
System.out.print(stack);
}
static void insert_at_bottom(int x, Stack<Integer> stack) {
if(stack.isEmpty()) {
stack.push(x);
}
else {
int y = stack.peek();
stack.pop();
insert_at_bottom(x,stack);
stack.push(y);
}
}
解决方案
- 使用 将堆栈的前半部分移动到临时堆栈中
push(pop())
。 Push(pop())
堆栈的后半部分变成结果堆栈。- 使用 将临时堆栈移动到结果堆栈中
push(pop())
。
例如:
public static Stack<Integer> reverseLastHalf(Stack<Integer> source){
Stack<Integer> temp = new Stack<>();
Stack<Integer> result = new Stack<>();
int size = source.size();
for(int i = 0; i < size; i++){
if(i < size / 2)
temp.push(source.pop());
else
result.push(source.pop());
}
while(!temp.isEmpty()) result.push(temp.pop());
return result;
}
也许这对您来说是一个有用的解决方案。
推荐阅读
- python - 获取传入的 TAPI 调用
- javascript - 无论起点如何,如何检查视频是否连续播放 30 秒?
- python - 导入库实用程序
- javascript - Webpack:如何在某些输出文件中保持导入?
- ruby-on-rails - stripe api 发票费用为空
- xpages - 从 8.5.3 升级到 Domino 9.0.1 后 XPage-Page 无法显示错误
- php - 禁用付款方式 Woocommerce
- sql-server - 组合 SQL 视图会降低效率
- javascript - 推送后我的组件不更新数据。可观察的不起作用
- blazor-server-side - Blazor 服务器端:如何上传 wwwroot 文件夹中的文件