劍指offer第二版 面試題9(java)

2021-09-12 10:00:25 字數 1225 閱讀 5698

面試題9:用兩個棧實現佇列

題目描述:方法:

兩個棧 stack1 & stack2

※ 插入時,直接放入stack1

※ 刪除時,直接彈出pop2中的物件;如果pop2為空,則先將pop1中的物件放入stack2中,再從stack2裡pop第乙個

如:依次放入stack1中1-2-3,在彈出並放入stack2中時,順序為3-2-1,stack2彈出時,彈出的為1

此時插入4,放入stack1中,現在為stack2從頂到底為2-3,stack2中只有4,刪除時彈出stack2中數字,即刪除2,順序正確,再刪除3,順序正確;插入5,放入stack1中,此時stack1中從頂到底為5-4,stack2中為空,若要刪除,則將stack1中的5-4,放入stack1中為從頂到底4-5,pop的物件為4,順序正確。

public class q9 

//出佇列

for(int i=0; i<5; i++)

} }public class cqueue

// 插入

stack1.push(node); }

// 刪除

public e deletehead() else

while(!stack1.empty())

return stack2.pop();

} }}

方法:

插入:放入不為空的那個佇列

刪除:將不為空的佇列中元素,依次移入另乙個佇列,並在temp=queue.poll()時,檢查是否隊列為空,如果隊列為空,則temp為最後乙個元素,需要刪除。

public class q9 

//出佇列 4 3 2

for(int i=0; i<3; i++)

system.out.println("\n----");

// 進佇列5 6

// 出佇列

for(int i=0; i<4; i++)

} }public class q9stack

if(queue1.isempty()) else }

public e deletehead() else

}}else else

}} return null;

} }

劍指offer第二版 面試題6(java)

面試題6 從尾到頭列印鍊錶 題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值 鍊錶的結點定義如下 public class listnode 注意 面試中,如果打算修改輸入的資料,最好先問好是否資料是允許修改的 思路 1.遍歷順序從頭到尾,列印順序從尾到頭,第乙個結點最開始被訪問,但是最...

劍指offer第二版 面試題8 java

題目描述 給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標 分析 情況 一 有右子樹,這時只需要把其右孩子作為下乙個遍歷的 並不是要找的 節點,然後沿著該節點的左子樹 如果有的話 出發,直到遇到葉子節點,那麼該葉子節...

劍指offer第二版 面試題10(java)

面試題10 斐波那契數列 題目一 寫乙個函式,輸入n,求斐波那契數列的第n項。定義 分段函式 f n 0 if n 0 f n 1 if n 1 f n f n 1 f n 2 if n 1 可用遞迴的方式,但在遞迴呼叫層級太多時,會導致呼叫棧溢位,且在此題中,遞迴方法有很多重複的計算 使用自下而上...