1. 程式人生 > >劍指offer[用兩個棧實現佇列]

劍指offer[用兩個棧實現佇列]

劍指offer[用兩個棧實現佇列]

題目描述

用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。

思路

用第一個棧來push,用第二個棧來pop。其中第二個棧pop之前如果為空需要將第一個棧的資料通過push來壓入(注意:必須加判斷第二個棧是否為空,否則不能保證stack2棧頂為先進的!!!)

程式碼

import java.util.Stack;

public class Solution
{ Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() { if(stack2.isEmpty()){//此處判斷必加 while(!stack1.empty())
{ stack2.push(stack1.pop()); } } return stack2.pop(); } }

細節知識

  • 此題我理解有兩種解法,第一種如上寫的,這樣做棧2非空之前pop的都為上一次棧1push進來的,等棧2的資料都pop完之後,棧1堆積的資料在重新一次都push進棧2來。
  • 第二種是每次從棧2pop取值之後,都把剩餘的資料pop進棧1,這樣做會導致每次棧2pop之前都為空,需要從棧1pop值來。