剑指Offer05 - 用两个栈实现队列
Posted jianminglin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer05 - 用两个栈实现队列相关的知识,希望对你有一定的参考价值。
重建二叉树
时间限制: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()
思路分析:
操作情况依次经历下述变化:
两栈都空
-> stack1不空 stack2空
-> stack1空 stack2不空
-> 两栈都不空
两栈都空
两栈都空 | 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 |
小结:
- 入栈情况:总是 stack1.push
- 出栈情况:
- 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();
以上是关于剑指Offer05 - 用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章