我正在编写一个名为public Iterator<E> iterator(int index)的函数,该函数返回一个从列表中指定位置(“索引”)开始的迭代器。指定的索引从0开始。到目前为止,我的代码如下。

public Iterator<E> iterator(int index) {
      Iterator<E> it = iterator(index);
        while (it.hasNext()) {
            E item = it.next();
            System.out.println(item);

        }
      return it;
  }


main中的代码如下所示。

public static void main(String[] args) {

      LinkedList<Integer> lst = new LinkedList<Integer>();

      lst.add(3);
      lst.append(6);
      lst.append(5);
      lst.append(7);

      lst.iterator(1);


lst是一个链表。当我尝试传入1的迭代器方法时,我希望它迭代从位置1开始的链表,然后应打印:6 5 7

但是,我收到一条错误消息,内容为

Exception in thread "main" java.lang.StackOverflowError
    at Midterm.LinkedList.iterator(LinkedList.java:183)


我无法弄清楚我在做什么错。我的问题是,有人可以告诉我如何解决我的public Iterator<E> iterator(int index)方法,以便迭代从位置1开始的链表吗?

最佳答案

您可以递归地调用方法,而无需停止:

public Iterator<E> iterator(int index) {
    Iterator<E> it = iterator(index); // calls this method again


因此它将无限期地调用iterator(int index) -> iterator(int index) -> iterator(int index) -> ...

由于堆栈的大小有限,这将导致堆栈溢出。

09-10 09:21
查看更多