面試題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 可用遞迴的方式,但在遞迴呼叫層級太多時,會導致呼叫棧溢位,且在此題中,遞迴方法有很多重複的計算 使用自下而上...