CodingInterview-06用兩個棧實現佇列
阿新 • • 發佈:2021-01-31
技術標籤:劍指Offer
Stack stack1; Stack stack2; public CQueue06() { //題目要求兩個棧實現佇列 stack1 = new Stack(); stack2 = new Stack(); } public void appendTail(int value) { //stack1用來存所有的值 stack1.push(value); } public int deleteHead() { if(stack1.empty()){ return -1; } /*根據棧的特性 先進後出 佇列的特性 先進先出 也就是在刪除一個元素的時候把棧反過來然後出棧*/ while (!stack1.empty()) { //反過來存到stack2 stack2.push(stack1.pop()); } //出棧儲存結果 int res = (int) stack2.pop(); //再返回來放回stack1 如果不返回來再插入資料會出問題 可以優化 while (!stack2.empty()){ stack1.push(stack2.pop()); } return res; }
public int deleteHead() { /*根據棧的特性 先進後出 佇列的特性 先進先出 也就是在刪除一個元素的時候把棧反過來然後出棧*/ //如果stack2還有值的話就沒必要把stack1倒過來 因為是stack2先出 if(stack2.empty()) { while (!stack1.empty()) { //反過來存到stack2 stack2.push(stack1.pop()); } } return stack2.empty()? -1 : (int) stack2.pop(); }
優化後也不是很理想 看了下別人的答案沒按要求用棧實現