首页 > 解决方案 > 有没有办法从堆栈底部反转后半部分元素(使用递归)?

问题描述

然而,有助于反转整个堆栈的代码无法让它反转一半的元素 -

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);
    }

}

标签: java

解决方案


  1. 使用 将堆栈的前半部分移动到临时堆栈中push(pop())
  2. Push(pop())堆栈的后半部分变成结果堆栈。
  3. 使用 将临时堆栈移动到结果堆栈中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;
}

也许这对您来说是一个有用的解决方案。


推荐阅读