Data structures 递归打印队列中的所有元素,而不更改队列';内容

Data structures 递归打印队列中的所有元素,而不更改队列';内容,data-structures,recursion,queue,Data Structures,Recursion,Queue,我正在研究数据结构和递归的时间复杂性。对于其中一个编码问题,他们有一个涉及队列的基本程序,并有一些算法应该通过的测试。其中一种方法是打印队列中的所有元素而不更改队列内容的方法。我不知道如何在不删除内容的情况下将它们全部打印出来。下面是我到目前为止的代码(不起作用,StackOverflowerError结果)和算法应该通过的测试 到目前为止,我的代码是: public void printOut() { if (!q.isEmpty()) { Syste

我正在研究数据结构和递归的时间复杂性。对于其中一个编码问题,他们有一个涉及队列的基本程序,并有一些算法应该通过的测试。其中一种方法是打印队列中的所有元素而不更改队列内容的方法。我不知道如何在不删除内容的情况下将它们全部打印出来。下面是我到目前为止的代码(不起作用,StackOverflowerError结果)和算法应该通过的测试

到目前为止,我的代码是:

    public void printOut() {

        if (!q.isEmpty()) {
        System.out.println(q.getFirst());
        T value = q.removeFirst();
        printOut();
        q.addLast(value);
        }
测试算法应通过:

    public class TestQueuePrintOut {

@Test
public void test() {
    LinkedListQueue<String> queue = new LinkedListQueue<String>();
    queue.enqueue("first");
    queue.enqueue("second");
    queue.enqueue("third");
    queue.enqueue("fourth");
    System.out.println("Expected output:\nfirst\nsecond\nthird\nfourth\n");
    System.out.println("Resulting output of printOut:");
    queue.printOut();
    assertTrue(queue.dequeue().equals("first"));
    assertTrue(queue.dequeue().equals("second"));
    assertTrue(queue.dequeue().equals("third"));
    assertTrue(queue.dequeue().equals("fourth"));
}

}
公共类TestQueuePrintOut{
@试验
公开无效测试(){
LinkedListQueue队列=新建LinkedListQueue();
排队。排队(“第一”);
排队。排队(“第二”);
排队。排队(“第三”);
排队。排队(“第四”);
System.out.println(“预期输出:\nfirst\nsecond\nthird\nFurth\n”);
System.out.println(“打印输出的结果:”);
queue.printOut();
assertTrue(queue.dequeue().equals(“first”);
assertTrue(queue.dequeue().equals(“second”);
assertTrue(queue.dequeue().equals(“第三”);
assertTrue(queue.dequeue().equals(“第四”);
}
}

非常感谢您的帮助。非常感谢。

您不能创建一个不变的视图吗?这是Java,所以我会查看标准库。你可以更改函数的原型吗?@Dabo我知道我们不能更改函数的参数。它必须是一个void函数。@wheaties我将尝试一个不可变视图,看看它是否能解决我的问题。