我必须为堆栈创建一个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