堆叠与行为

时间:2017-01-15 01:04:07

标签: java stack

结果是4 3 2,我不知道为什么。如何使用堆栈/队列/列表?我没有为这段代码寻找更好的选择(因为我已经知道了)我只是想知道这个是如何工作的。

class Stack_1 {
        public static void main(String [] args) {
          Stack s = new Stack();
          List l= new LinkedList();
          for(int i = 0; i < 5; i++)
            s.add(i);
          for(int i = 0; i < l.size(); i++)
            s.push(l.remove(i));//this does nothing
          for(int i = 0; i < s.size(); i++)
            System.out.print(" "+ s.pop() );
       }
      }

2 个答案:

答案 0 :(得分:1)

如果你对最后一个循环感兴趣,它会迭代5次,因为你从0到堆栈的大小(如果你想知道这个,第一个循环是填充它的那个)。在每次迭代中,您在堆栈上调用pop,这将删除并返回顶部的元素。因此,在循环之前,在第一次迭代[4,3,2,1,0]之后,您的堆栈为[3,2,1,0],然后是[2,1,0],依此类推。在每次迭代中,您还会打印删除的最高值,这就是您在控制台上看到它的原因。循环结束后,您的堆栈将为空。希望它有所帮助。

答案 1 :(得分:1)

这是一个有趣的观察。如果您希望代码正常运行,请尝试以下操作:

    Stack s = new Stack();
    List l= new LinkedList();
    for(int i = 0; i < 5; i++)
      s.add(i);
    for(int i = 0; i < l.size(); i++)
      s.push(l.remove(i));//this does nothing
    int stackSize = s.size();
    for(int i = 0; i < stackSize; i++)
      System.out.print(" "+ s.pop() );

您希望最后一个循环的运行次数与堆栈中的元素一样多;但是,使用pop()不断改变堆栈大小。希望这会有所帮助。