题一:用栈实现队列

地址:https://leetcode-cn.com/problems/implement-queue-using-stacks/,题号:232。
image.png
【解题思路】
首先我们知道,栈是先入后出,队列是先入先出的,所以一个栈肯定是实现不了这个功能,这里我们使用了两个栈。一个输入栈,所有的push操作都要先push到这个栈中;另一个是输出栈,所有的输出都从输出栈中弹出。
这里需要提示一下的是,一开始输出栈没有内容,必须要先把输入栈中所有的元素都移到输出栈中,然后调用pop或者peek时才能从输出栈中输出,而输出栈也必须先把元素都输出完了才能再次从输出栈中移动元素。

  1. // initialize
  2. var MyQueue = function() {
  3. this.inputStack = [];
  4. this.ouputStatck = [];
  5. };
  6. // push
  7. MyQueue.prototype.push = function(x) {
  8. this.inputStack.push(x);
  9. };
  10. // pop
  11. MyQueue.prototype.pop = function() {
  12. if(!this.ouputStatck.length) { // 先要判断输出栈没有元素
  13. while(this.inputStack.length>0) { // 然后再从输入栈挪元素,挪要全部挪完
  14. this.ouputStatck.push(this.inputStack.pop());
  15. }
  16. }
  17. return this.ouputStatck.pop();
  18. };
  19. // peek
  20. MyQueue.prototype.peek = function() {
  21. if(!this.ouputStatck.length) {
  22. while(this.inputStack.length>0) {
  23. this.ouputStatck.push(this.inputStack.pop());
  24. }
  25. }
  26. return this.ouputStatck[this.ouputStatck.length-1];
  27. };
  28. // empty
  29. MyQueue.prototype.empty = function() {
  30. if(this.inputStack.length || this.ouputStatck.length) {
  31. return false;
  32. } else {
  33. return true;
  34. }
  35. };

题二:用队列实现栈

地址:https://leetcode-cn.com/problems/implement-stack-using-queues/,题号:225。
image.png
【解题思路】
这个例子的思路更简单,具体过程不再赘述,自行查看代码。

  1. var MyStack = function() {
  2. this.queue = [];
  3. };
  4. MyStack.prototype.push = function(x) {
  5. this.queue.push(x);
  6. };
  7. MyStack.prototype.pop = function() {
  8. return this.queue.pop();
  9. // 也可以不用api
  10. let last = this.queue[this.queue.length-1];
  11. this.queue.length--;
  12. return last;
  13. };
  14. MyStack.prototype.top = function() {
  15. return this.queue[this.queue.length-1];
  16. };
  17. MyStack.prototype.empty = function() {
  18. return this.queue.length === 0;
  19. };

to be continue…