public static int sizeIter(LinkedStack p)
{
int s= 0;
if(p.isEmpty())
return 0;
else
{
while(p.isEmpty()==false)
{
p.pop();
s++;
}
System.out.println("iter" + s);
return s;
}
}
//Here's my driver
public static void main(String[] args) {
LinkedStack l = new LinkedStack();
System.out.println("Case 1: Size(Iter) = "+ sizeIter(l));
l.push(5);
l.push(4);
l.push(3);
l.push(2);
l.push(1);
System.out.println("Case 2: Size(Iter) = "+ sizeIter(l));
输出始终为0.我不明白。我试图使用迭代方法找到linkedstack的大小。我检查了链接堆栈是否正在推送元素,但尺寸仍然没有改变。
答案 0 :(得分:2)
在一般情况下
我还没找到" LinkedStack
"在我的默认Java库中,但我在Stack
中找到了正常的Java.util
此答案基于Java.util.Stack
使用Stack
代替LinkedStack
,您的代码绝对正常(案例1 = 0,案例2 = 5)
我在驱动程序中更改了一行:Stack<Integer> l = new Stack<Integer>();
你方法可能致命
你的方法在计数时会占用堆栈。这是因为两种方法都修改了内存中的相同位置,并且您通过删除堆栈的元素进行计数
你怎么看?:
在驱动程序的末尾添加行System.out.println("Case 3: Size(Iter) = "+ sizeIter(l));
=&GT;这将返回&#34;案例3:大小(Iter)= 0&#34;
其他解决方案
.size()
的默认Stack
方法。 <强>脚注强>
您的迭代方法的else
部分是不必要的,因为如果if
评估true
,该方法仍会重新生成。