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是否正在推送元素,但是大小仍然没有改变。
最佳答案
在一般情况下
我没有在默认的Java库中找到“ LinkedStack
”,但是在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));
行
=>这将返回“情况3:Size(Iter)= 0”
其他解决方案
使用默认的.size()
方法Stack
。
使用迭代方法并使用while循环进行计数之前,创建堆栈的深层克隆
脚注
迭代方法的else
部分是不必要的,因为如果if
评估true
,该方法仍将重新运行。
关于java - LinkedStack的大小输出始终为0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47797735/