Ref變量
變量作為參數(shù)傳給方法,同時(shí)希望在方法執(zhí)行完成后这弧,對(duì)參數(shù)所做的修改能夠反映到變量上
如果在一段代碼中調(diào)用了一個(gè)函數(shù)娃闲,該函數(shù)使用了當(dāng)前代碼段中的變量,當(dāng)函數(shù)執(zhí)行完畢返回后匾浪,該變量仍然保持著函數(shù)中的值皇帮,相當(dāng)于ref類(lèi)型的變量是忽略了函數(shù)中局部變量的限制的變量。
劍指 Offer 09. 用兩個(gè)棧實(shí)現(xiàn)隊(duì)列
用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列蛋辈。隊(duì)列的聲明如下属拾,請(qǐng)實(shí)現(xiàn)它的兩個(gè)函數(shù) appendTail 和 deleteHead ,分別完成在隊(duì)列尾部插入整數(shù)和在隊(duì)列頭部刪除整數(shù)的功能冷溶。(若隊(duì)列中沒(méi)有元素渐白,deleteHead 操作返回 -1 )
示例 1:
輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]
示例 2:
輸入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
輸出:[null,-1,null,null,5,2]
題意其實(shí)就是用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的入隊(duì)與出隊(duì)操作(隊(duì)尾添加與隊(duì)列去頭)
其中處理appendTail有輸入值,以及deleteHead有輸出值外逞频,其他的輸出全為Null
綜上所述即可理解題意
解決方法
public class CQueue {
private Stack<int> stack1;
private Stack<int> stack2;
public CQueue() {
stack1 = new Stack<int>();//初始化纯衍,其中stack1負(fù)責(zé)入棧,stack2負(fù)責(zé)出棧
stack2 = new Stack<int>();
}
public void AppendTail(int value) {
stack1.Push(value);//入隊(duì)操作苗胀,與入棧操作無(wú)異
}
public int DeleteHead() {//出隊(duì)操作
if(stack2.Count == 0){//首先判斷負(fù)責(zé)出隊(duì)的棧stack2是否為空
while(stack1.Count != 0){//不為空則講stack1中的元素循環(huán)入棧stack2
stack2.Push(stack1.Pop());
}
}
if(stack2.Count == 0){//再次判斷stack2是否為空托酸,此時(shí)是為了檢測(cè)是否隊(duì)列為空(因?yàn)樯厦嬉约皩tack1入棧到stack2了,如果stack1為空則stack2此時(shí)也為空柒巫,所以此時(shí)說(shuō)明隊(duì)列為空励堡,返回-1
return -1;
}else{
int deleteItem = stack2.Pop();//stack2最后加入的元素出棧,既隊(duì)列去頭
return deleteItem;//返回出棧元素
}
}
}