码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指Offer】05 - 用两个栈实现队列

时间:2019-08-03 00:45:40      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:return   header   入栈   二叉树   head   solution   一个队列   题目   imp   

重建二叉树

时间限制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=[] return null

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
return stack2.pop

stack1空 stack2不空

1空 2不空 stack1=[] stack2=[2, 3, 4] 操作步骤
入栈 {5, 6} stack1=[6, 5] stack2=[2, 3, 4] 2 * stack1.push
出栈 stack1=[] stack2=[3, 4] return 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] return 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();
    }
}

【剑指Offer】05 - 用两个栈实现队列

标签:return   header   入栈   二叉树   head   solution   一个队列   题目   imp   

原文地址:https://www.cnblogs.com/jianminglin/p/11291789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!