题目地址(09. 用两个栈实现队列)

https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/

题目描述

  1. 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
  2. 示例 1
  3. 输入:
  4. ["CQueue","appendTail","deleteHead","deleteHead"]
  5. [[],[3],[],[]]
  6. 输出:[null,null,3,-1]
  7. 示例 2
  8. 输入:
  9. ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
  10. [[],[],[5],[2],[],[]]
  11. 输出:[null,-1,null,null,5,2]
  12. 提示:
  13. 1 <= values <= 10000
  14. 最多会对 appendTaildeleteHead 进行 10000 次调用

前置知识


公司

  • 暂无

思路

image.png

关键点


代码

  • 语言支持:Java

Java Code:

  1. class CQueue {
  2. LinkedList<Integer> stack;
  3. LinkedList<Integer> stack2;
  4. public CQueue() {
  5. stack = new LinkedList<>();
  6. stack2 = new LinkedList<>();
  7. }
  8. public void appendTail(int value) {
  9. stack.add(value);
  10. }
  11. public int deleteHead() {
  12. if(stack2.isEmpty()){
  13. if(stack.isEmpty()){
  14. return -1;
  15. }
  16. while(!stack.isEmpty()){
  17. stack2.add(stack.pop());
  18. }
  19. }
  20. return stack2.pop();
  21. }
  22. }
  23. /**
  24. * Your CQueue object will be instantiated and called as such:
  25. * CQueue obj = new CQueue();
  26. * obj.appendTail(value);
  27. * int param_2 = obj.deleteHead();
  28. */

复杂度分析

令 n 为数组长度。

  • 时间复杂度:剑指 Offer 09. 用两个栈实现队列 - 图2#card=math&code=O%28n%29&id=Jg1ao)
  • 空间复杂度:剑指 Offer 09. 用两个栈实现队列 - 图3#card=math&code=O%28n%29&id=z3jqy)