1. 题目描述
  2. 使用栈实现队列的下列操作:
  3. push(x) -- 将一个元素放入队列的尾部。
  4. pop() -- 从队列首部移除元素。
  5. peek() -- 返回队列首部的元素。
  6. empty() -- 返回队列是否为空。
  7. 示例:
  8. MyQueue queue = new MyQueue();
  9. queue.push(1);
  10. queue.push(2);
  11. queue.peek(); // 返回 1
  12. queue.pop(); // 返回 1
  13. queue.empty(); // 返回 false
  14. 说明:
  15. 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, is empty 操作是合法的。
  16. 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
  17. 假设所有操作都是有效的、 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
  18. var MyQueue = function () {
  19. //TODO
  20. };
  21. /**
  22. * Push element x to the back of queue.
  23. * @param {number} x
  24. * @return {void}
  25. */
  26. MyQueue.prototype.push = function (x) {
  27. //TODO
  28. };
  29. /**
  30. * Removes the element from in front of queue and returns that element.
  31. * @return {number}
  32. */
  33. MyQueue.prototype.pop = function () {
  34. //TODO
  35. };
  36. /**
  37. * Get the front element.
  38. * @return {number}
  39. */
  40. MyQueue.prototype.peek = function () {
  41. //TODO
  42. };
  43. /**
  44. * Returns whether the queue is empty.
  45. * @return {boolean}
  46. */
  47. MyQueue.prototype.empty = function () {
  48. //TODO
  49. };

我的回答

  1. var MyQueue = function () {
  2. //TODO
  3. return this.stack = []
  4. };
  5. /**
  6. * Push element x to the back of queue.
  7. * @param {number} x
  8. * @return {void}
  9. */
  10. MyQueue.prototype.push = function (x) {
  11. //TODO
  12. return this.stack.push(x)
  13. };
  14. /**
  15. * Removes the element from in front of queue and returns that element.
  16. * @return {number}
  17. */
  18. MyQueue.prototype.pop = function () {
  19. //TODO
  20. return this.stack.pop()
  21. };
  22. /**
  23. * Get the front element.
  24. * @return {number}
  25. */
  26. MyQueue.prototype.peek = function () {
  27. //TODO
  28. return this.stack[this.stack.length - 1]
  29. };
  30. /**
  31. * Returns whether the queue is empty.
  32. * @return {boolean}
  33. */
  34. MyQueue.prototype.empty = function () {
  35. //TODO
  36. this.stack.length = 0
  37. return this.stack
  38. };

参考回答

// 使用两个栈来分别管理入队和出队

  1. /**
  2. * Initialize your data structure here.
  3. */
  4. var MyQueue = function() {
  5. this.stack1 = []
  6. this.stack2 = []
  7. };
  8. /**
  9. * Push element x to the back of queue.
  10. * @param {number} x
  11. * @return {void}
  12. */
  13. MyQueue.prototype.push = function(x) {
  14. if(this.stack1.length) {
  15. while(this.stack1.length) {
  16. this.stack2.push(this.stack1.pop())
  17. }
  18. this.stack1.push(x)
  19. while(this.stack2.length) {
  20. this.stack1.push(this.stack2.pop())
  21. }
  22. } else {
  23. this.stack1.push(x)
  24. }
  25. };
  26. /**
  27. * Removes the element from in front of queue and returns that element.
  28. * @return {number}
  29. */
  30. MyQueue.prototype.pop = function() {
  31. return this.stack1.pop()
  32. };
  33. /**
  34. * Get the front element.
  35. * @return {number}
  36. */
  37. MyQueue.prototype.peek = function() {
  38. if(this.stack1.length) {
  39. return this.stack1[this.stack1.length-1]
  40. }
  41. return null
  42. };
  43. /**
  44. * Returns whether the queue is empty.
  45. * @return {boolean}
  46. */
  47. MyQueue.prototype.empty = function() {
  48. return !this.stack1.length
  49. };
  50. /**
  51. * Your MyQueue object will be instantiated and called as such:
  52. * var obj = new MyQueue()
  53. * obj.push(x)
  54. * var param_2 = obj.pop()
  55. * var param_3 = obj.peek()
  56. * var param_4 = obj.empty()
  57. */