1. 程式人生 > >【劍指offer】用兩個棧實現佇列的入隊出隊操作

【劍指offer】用兩個棧實現佇列的入隊出隊操作

劍指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()); } }