[Предложение], чтобы доказать безопасность 05 - очереди с помощью двух стеков

Реконструкция бинарного дерева

Ограничение по времени : 1秒
пространственные ограничения : 32768K
этот вопрос знание : 队列
Название Описание :

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        
    }
    
    public int pop() {
    
    }
}

Анализ идей:

Эксплуатация последовательно претерпевает следующие изменения:

  1. Два стеки пусты

  2. -> stack1 не пустой пустой stack2

  3. -> stack1 пустой stack2 не пусто

  4. -> два стека не пустой

Два стеки пусты

Два стеки пусты STACK1 = [] stack2 = [] меры
Рисунок {1, 2} STACK1 = [2, 1] stack2 = [] 2 * stack1.push
поп STACK1 = [] stack2 = [] возвращение нулевой

stack1 не пусто stack2 пусто

1 2 не пусто пусто STACK1 = [2, 1] stack2 = [] меры
Рисунок {3, 4} STACK1 = [4, 3, 2, 1] stack2 = [] 2 * stack1.push
поп STACK1 = [] stack2 = [2, 3, 4] 4 * stack1.pop
4 * stack2.push
возвращение stack2.pop

stack1 пустой stack2 не пусто

1 2 не пусто Empty STACK1 = [] stack2 = [2, 3, 4] меры
Рисунок {5, 6} STACK1 = [6, 5] stack2 = [2, 3, 4] 2 * stack1.push
поп STACK1 = [] stack2 = [3, 4] вернуться stack2.pop

Два стека не пустой

Два стека не пустой STACK1 = [6, 5] stack2 = [2, 3, 4] меры
Рисунок {7, 8} STACK1 = [8, 7, 6, 5] stack2 = [2, 3, 4] 2 * stack1.push
поп STACK1 = [6, 5] stack2 = [3, 4] вернуться stack2.pop

Краткое описание:

  1. Стек ситуацию: всегда stack1.push
  2. Стек случай:
    • stack2 пусто: все элементы стека stack1 в stack2, а затем выполнить stack2.pop
    • stack2 не пусто: stack2.pop

Ответ:

import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        // 若 stack2 为空:将所有 stack1 元素入栈到 stack2
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

рекомендация

отwww.cnblogs.com/jianminglin/p/11291789.html