示例 1:
輸入:
[,[3],,]
輸出:[null,null,3,-1]
示例 2:
輸入:
[,,[5],[2],,]
輸出:[null,-1,null,null,5,2]
解題思路:
棧無法實現佇列功能: 棧底元素(對應隊首元素)無法直接刪除,需要將上方所有元素出棧。
雙棧可實現列表倒序: 設有含三個元素的棧 a = [1,2,3] 和空棧 b = 。若迴圈執行 a 元素出棧並新增入棧 b ,直到棧 a為空,則 a = ,b=[3,2,1] ,即 棧 b 元素實現棧 a 元素倒序 。
利用棧 b 刪除隊首元素: 倒序後,b 執行出棧則相當於刪除了 a 的棧底元素,即對應隊首元素。
複雜度分析:
由於問題特殊,以下分析僅滿足新增 n 個元素並刪除 n 個元素,即棧初始和結束狀態下都為空的情況。
class cqueue
st1.push(value);
}int deletehead()
if (st2.empty())
}res = st2.top();
st2.pop();
return res;
}};
《劍指offer》面試題七 用兩個棧實現佇列
原題位址 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。這裡用兩個陣列來模擬兩個棧。由於棧的特點是先進後出,佇列的特點是先進先出,所以這裡要用兩個棧來實現,乙個棧先進後出,兩個棧的話就可以先進先出了。其中乙個棧 稱呼a棧吧 專門用來完成push操作。只要...
劍指Offer 面試題七 用兩個棧實現佇列
templateclass cqueue cqueue void t deletehead void print private stackstack1 stackstack2 stack1只相當於乙個轉換器,新增元素時經過stack1將元素統統存入stack2中,也就是說stack2中存入元素,s...
劍指Offer 面試題9用兩個棧實現佇列
思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...