linkedstack的大小输出始终为0?

时间:2017-12-13 16:18:59

标签: java data-structures iteration size

   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的大小。我检查了链接堆栈是否正在推送元素,但尺寸仍然没有改变。

1 个答案:

答案 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方法。
  • 使用您的迭代方法,并使用while循环
  • 创建堆栈的深层克隆

<强>脚注
您的迭代方法的else部分是不必要的,因为如果if评估true,该方法仍会重新生成。