剑指 Offer 09. 用两个栈实现队列

难度简单
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:
输入: [“CQueue”,”appendTail”,”deleteHead”,”deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1]
示例 2:
输入: [“CQueue”,”deleteHead”,”appendTail”,”appendTail”,”deleteHead”,”deleteHead”] [[],[],[5],[2],[],[]] 输出:[null,-1,null,null,5,2]
提示:

  • 1 <= values <= 10000
  • 最多会对 appendTail、deleteHead 进行 10000 次调用
  1. var CQueue = function() {
  2. //stackA用来存放新添加的数据
  3. //stackB用来逆序栈使得删除时能和队列特性一致
  4. this.stackA = []
  5. this.stackB = []
  6. };
  7. /**
  8. * @param {number} value
  9. * @return {void}
  10. */
  11. CQueue.prototype.appendTail = function(value) {
  12. this.stackA.push(value)
  13. };
  14. /**
  15. * @return {number}
  16. */
  17. CQueue.prototype.deleteHead = function() {
  18. //当stackB没有数据时,将stackA中的数据存入stackB
  19. if(!this.stackB.length){
  20. while(this.stackA.length){
  21. this.stackB.push(this.stackA.pop())
  22. }
  23. }
  24. //当stackB有数据,则pop(),没有数据则说明队列为空
  25. if(this.stackB.length){
  26. return this.stackB.pop()
  27. }else{
  28. return -1
  29. }
  30. };
  31. /**
  32. * Your CQueue object will be instantiated and called as such:
  33. * var obj = new CQueue()
  34. * obj.appendTail(value)
  35. * var param_2 = obj.deleteHead()
  36. */