【发布时间】:2016-09-18 14:28:53
【问题描述】:
我必须为堆栈创建一个 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<T> pTmp = mTop;,两个while循环的中断条件是什么。您似乎只是在推送数据离子堆栈,将其弹出并清空堆栈 -
两个while循环的中断条件应该是栈OurStack和tempStack的清空。然而,正如 MajkeloDev 指出的那样,该方法根本没有识别出任何数据正在被输入。我使用 pTmp 作为指向堆栈顶部的临时指针。因此,当我编写 pTmp = pTmp.Next 时,我试图将其从框架中弹出,分析其内容,然后将其完全从堆栈中删除或将其放入 tempStack 中,但这并没有发生,因为我从来没有真正让它超过while循环线。