首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

劍指 Offer 面試題 7:用兩個棧實現隊列(Java 實現)

     編輯:Java 相關知識

題目

用兩個棧實現隊列,實現 appendTail(尾部插入)和 deleteHead(頭部刪除)。

思路

  • 入隊:只壓入 stack1。
  • 出隊:若 stack2 不空,彈出 stack2 栈頂;若 stack2 空,將 stack1 所有元素彈出壓入 stack2,再彈出 stack2 栈頂。若兩棧皆空拋異常。

代碼實現

public class No7QueueWithTwoStacks {
    private static Stack stack1 = new Stack<>();
    private static Stack stack2 = new Stack<>();

    public static void appendTail(Object item) {
        stack1.push(item);
        System.out.println("壓入棧元素:" + item);
    }

    public static void deleteHead() {
        if (!stack2.empty()) {
            System.out.println("彈出棧元素:" + stack2.pop());
        } else {
            if (stack1.empty()) throw new RuntimeException("隊列為空");
            while (!stack1.empty()) {
                stack2.push(stack1.pop());
            }
            deleteHead(); // 遞歸調用
        }
    }

    public static void main(String[] args) {
        appendTail(1);
        appendTail(2);
        appendTail(3);
        deleteHead(); // 1
        deleteHead(); // 2
        appendTail(4);
        deleteHead(); // 3
        appendTail(5);
        deleteHead(); // 4
        deleteHead(); // 5
        deleteHead(); // 異常
    }
}
							
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved