我有一个链表,我需要创建一个方法,在列表的给定点返回一个迭代器。我目前有一个从头开始的迭代器:
public Iterator<E> iterator( )
{
return new ListIterator();
}
我对另一个人的全部是:
public Iterator<E> iterator(int x )
{
return new ListIterator();
}
我不确定如何利用给定位置(x)不会影响从头开始的ListIterator构造函数。
我尝试使用for循环来到&#34; x&#34;但意识到不会告诉迭代者从那里开始,所以我很难过。
编辑:
public ListIterator()
{
current = head; // head in the enclosing list
}
答案 0 :(得分:8)
没有看到你的实现,这样做的简单方法是:
public Iterator<E> iterator(int x) {
if (x < 0 || this.size() < x) {
throw new IndexOutOfBoundsException();
}
Iterator<E> it = new ListIterator();
for (; x > 0; --x) {
it.next(); // ignore the first x values
}
return it;
}
否则,您可以将列表遍历到第x个节点,但是没有理由不这样做。
答案 1 :(得分:5)
只需使用listIterator(index);
中的List
方法,其中index
是int
,类似于起始索引。编辑:在你的情况下它将是
List<...> list = ...;
return list.listIterator(x);
答案 2 :(得分:-1)
所以我最终选择了这个。
public Iterator<E> iterator(int x){
Iterator<E> it = new ListIterator();
for (; x > 0; --x){
it.next();
}
return it;
}
考虑到更多的范围,我可能已经添加了一个构造函数但是无法改变太多,这是最好的。