用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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. this.stack_main = []
    3. this.stack_assistant = []
    4. };
    5. CQueue.prototype.appendTail = function(value) {
    6. this.stack_main.push(value)
    7. console.log(null)
    8. };
    9. CQueue.prototype.deleteHead = function() {
    10. if(!this.stack_main.length){
    11. return -1
    12. }else{
    13. while(this.stack_main.length){
    14. this.stack_assistant.push(this.stack_main.pop())
    15. }
    16. let a = this.stack_assistant.pop();
    17. while(this.stack_assistant.length){
    18. this.stack_main.push(this.stack_assistant.pop())
    19. }
    20. //console.log(this.stack_main)
    21. return a
    22. }
    23. };
    24. var obj = new CQueue()
    25. var param_2 = obj.deleteHead()
    26. console.log(param_2) // -1
    27. obj.appendTail([5])
    28. obj.appendTail([2])
    29. param_2 = obj.deleteHead()// [5]
    30. console.log(param_2)
    31. param_2 = obj.deleteHead()// [-1]
    32. console.log(param_2)
    33. // 输入:
    34. // ["CQueue","appendTail","deleteHead","deleteHead"] 进行的操作
    35. // [[],[3],[],[]] 对应数组的样子
    36. // 输出:[null,null,3,-1] 返回的值

    缺点:冗余,多一步从assistant回到main的过程。
    append时间复杂度为:O(1)
    delete时间复杂度为:O(n)
    注意:
    1. pop()弹出数组最后一个数,并且返回这个数
    2.注意点push返回的时长度
    优化代码:

    1. var CQueue = function() {
    2. this.stack_main = []
    3. this.stack_assistant = []
    4. };
    5. CQueue.prototype.appendTail = function(value) {
    6. this.stack_main.push(value)
    7. };
    8. CQueue.prototype.deleteHead = function() {
    9. // 如果上次还有未删除完的数值先删除上次的数值(完成先进先出的功能)
    10. if(this.stack_assistant.length){
    11. return this.stack_assistant.pop()
    12. }else{
    13. while(this.stack_main.length){
    14. this.stack_assistant.push(this.stack_main.pop())
    15. }
    16. if(!this.stack_assistant.length){
    17. return -1
    18. }else{
    19. return this.stack_assistant.pop()
    20. }
    21. }
    22. };

    执行结果:
    image.png