剑指offer_用两个栈实现队列

不念不忘少年蓝@ 2022-06-14 00:51 333阅读 0赞
  1. /*
  2. 用两个栈实现队列:
  3. 要做到先进先出,stack2作为辅助栈:
  4. 把第一个栈中的元素按照先进后出顺序取出放入第二个栈中,再从第二个栈中弹出来,如此便做到了先进先出;
  5. 再将弹出完毕的stack2中剩余元素放回stack1;
  6. **/
  7. import java.util.Stack;
  8. class QueneWithTwoStacks
  9. {
  10. public static Stack<Integer> stack1 = new Stack<Integer>();
  11. public static Stack<Integer> stack2 = new Stack<Integer>();
  12. public static void push(int node)
  13. {
  14. stack1.push(node);
  15. }
  16. public static int pop() {
  17. //将stack1中元素移到stack2,元素顺序将随之反转
  18. while (!stack1.empty())
  19. {
  20. stack2.push(stack1.pop());
  21. }
  22. //弹出stack2栈顶元素
  23. int a=stack2.pop();
  24. //将弹出元素后的stack2元素移回stack1
  25. while (!stack2.empty())
  26. {
  27. stack1.push(stack2.pop());
  28. }
  29. return a;
  30. }
  31. //剑指offer思路
  32. public static int pop2() {
  33. if (stack2.empty())//stack2为空时将stack1中元素移到stack2,若stack2不为空则直接弹出stack2中的栈顶
  34. {
  35. //将stack1中元素移到stack2,元素顺序将随之反转
  36. while (!stack1.empty())
  37. {
  38. stack2.push(stack1.pop());
  39. }
  40. }
  41. return stack2.pop();
  42. }
  43. public static void main(String[] args)
  44. {
  45. push(1);
  46. push(2);
  47. push(3);
  48. System.out.println(pop2());
  49. System.out.println(pop2());
  50. push(4);
  51. System.out.println(pop2());
  52. push(5);
  53. System.out.println(pop2());
  54. System.out.println(pop2());
  55. }
  56. }

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读