【劍指offer】用兩個棧實現佇列的入隊出隊操作
阿新 • • 發佈:2018-11-28
劍指offer
題目要求
用兩個棧來實現一個佇列,完成佇列的Push(入棧)和Pop(出棧)操作。
佇列中的元素為int型別
補充
棧的特性:先進後出(LIFO, Last In First Out),類似於水桶。
佇列的特性:先進先出(FIFO, FIFO In First Out),類似於水管。
核心思想
利用兩個棧,一個用於入隊,一個用於出隊,入隊時,直接放入棧1,出隊時,由棧1倒到棧2,再出(將先出棧的又變成先入棧的,後出棧的變成後入棧的,因此達到佇列的要求,通俗的講,就是負負得正)
完整程式碼如下
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() {
//如果棧2是空,就把棧1內容彈出來入棧2,如果上述操作後仍然為空,則返回-1;
if(stack2.empty()){
//這裡,只有在stack2為空時,即pop完之後,才可以插入stack1的元素。否則會發生錯誤
while(stack1.empty() != true){
stack2.push(stack1.pop());
}
}
if(stack2.empty()){
//即stack1也為空
return -1;
}
//否則,可以出隊(出棧)
return stack2.pop();
}
public static void main(String[] args) {
Solution sl = new Solution();
sl.push(6);
sl.push(7);
sl.push(8);
System. out.println(sl.pop());
System.out.println(sl.pop());
}
}