我必須爲堆棧創建一個RemoveAll方法,該方法取出所有特定值,然後將其他值返回到原始堆棧。然而,我寫的方法只返回false。我的代碼中有什麼錯誤?爲什麼我的布爾RemoveAll方法只返回false?
這是我寫的方法:
public bool RemoveAll(T item)
{
Stack<T> OurStack = new Stack<T>();
Stack<T> tempStack = new Stack<T>();
bool itemRemove = false;
OurListNode<T> pTmp = mTop;
while (OurStack.Count > 0)
{
if (pTmp.Data.Equals(item))
{
itemRemove = true;
pTmp = pTmp.Next;
}
else
{
tempStack.Push(pTmp.Data);
}
}
while (tempStack.Count > 0)
{
pTmp = pTmp.Next;
OurStack.Push(pTmp.Data);
}
return itemRemove;
}
這是我寫的測試方法主要:
static void Main()
{
OurStack<int> nums = new OurStack<int>();
nums.Push(1);
nums.Push(31);
nums.Push(22);
nums.Push(3);
//nums.RemoveAll(31);
Console.Write(nums.RemoveAll(1));
Console.ReadKey();
什麼是'OurListNode pTmp = mTop;',兩個'while'循環的中斷條件是什麼。您似乎只推送數據離子堆棧,並彈出堆棧並清空堆棧 –
兩個while循環的中斷條件應爲清空堆棧OurStack和tempStack。然而,這個方法並沒有意識到MajkeloDev指出任何數據都被放入。我使用pTmp作爲棧頂的臨時指針。所以當我寫pTmp = pTmp.Next時 - 我試圖將其從框架中彈出,分析其內容,然後將其從堆棧中完全移除或放置在tempStack中,但這不會發生,因爲我永遠不要讓它通過while循環線。 – Stephanie