Stack,Queue和LinkedList脑筋急转弯的输出

时间:2014-06-12 19:13:51

标签: java stack queue

这是一本关于在LinkedLists,Stacks和Queue上测试你的书的问题。目标是从这段简短的代码片段中打印出所需的输出。我已将代码附在我的分析中。

LinkedList<Integer> a = new LinkedList<Integer>();
Stack<Integer> s = new Stack<Integer>();
Queue<Integer> q = new LinkedList<Integer>();

a.add( 2 );
a.add( 3 );
a.add( 5 );
a.add( 7 );

LL:a = {2, 3, 5, 7}

for ( int i : a )
{
    System.out.print( i + " " );
    s.push( i );
    q.add( i );
}

打印输出:2 3 5 7

筹码:s = {2, 3, 5, 7}

队列:q = {2, 3, 5, 7}

System.out.println();

for ( int i : a )
{
    s.push( i );
    q.add( s.pop() + 5 );
    System.out.print( s.pop() + " " );
}

筹码:s = {2, 3, 5, 7, 2, 3, 5, 7}

队列:q = {2, 3, 5, 7, 12, 10, 8, 7}。这是s.pop() + 5

的结果

打印输出:7 5 3 2

System.out.println();

for ( int i : a )
{
    System.out.print( q.remove() + " " );
    System.out.print( q.remove() + " " );
}

打印输出:2 3 5 7 12 10 8 7

总而言之,我的打印输出是:

2 3 5 7

7 5 3 2

2 3 5 7 12 10 8 7

然而,这个问题的答案是:

2 3 5 7

7 5 3 2

2 3 5 7 7 8 10 12

如您所见,结果在队列打印中不匹配。我重复了两次问题,但无法确定我在添加(s.pop() + 5)或.pop()打印时是否出错。有人能给我一些关于我做错了什么的见解吗?

1 个答案:

答案 0 :(得分:2)

认为你的错误就在这里,在第三段代码中:

for ( int i : a )
{
    s.push( i );
    q.add( s.pop() + 5 );
    System.out.print( s.pop() + " " );
}

i推入堆栈后,会立即通过q.add(s.pop() + 5); 弹出。执行将是这样的:

在:

s == [2, 3, 5, 7]
q == [2, 3, 5, 7]

第一次迭代:

2 is pushed onto s
2 is popped off of s
5 is added to 2
7 is added to q
7 is popped off s and printed

第二次迭代:

3 is pushed onto s
3 is popped off of s
5 is added to 3
8 is added to q
5 is popped off s and printed

依此类推。

因此,该循环之后的正确结果应该是一个空堆栈和一个队列:

[2, 3, 5, 7, 7, 8, 10, 12]

我认为其他一切都还可以。