问题
I have a linked list and I need to make method that returns an iterator at a given point in the list. I currently have an iterator that starts at the head:
public Iterator<E> iterator( )
{
return new ListIterator();
}
All I have for the other one is:
public Iterator<E> iterator(int x )
{
return new ListIterator();
}
I'm not sure how to go about utilizing the given position(x) that won't affect my ListIterator constructor which starts at head.
I tried using a for loop to get to "x" but realized that wouldn't tell the iterator to start there, so I'm quite stumped.
Edit:
public ListIterator()
{
current = head; // head in the enclosing list
}
回答1:
Without seeing your implementation, the trivial way to do this is:
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;
}
Otherwise, you could traverse the list to the xth node, but there's no reason you can't do it this way.
回答2:
Simply use the listIterator(index);
method from List
, in which index
is an int
resembling the starting index. Edit: in your case it would be
List<...> list = ...;
return list.listIterator(x);
回答3:
So I ended up going with this.
public Iterator<E> iterator(int x){
Iterator<E> it = new ListIterator();
for (; x > 0; --x){
it.next();
}
return it;
}
Given more range I might have added a constructor but without being able to change much this worked the best.
来源:https://stackoverflow.com/questions/30146484/how-to-have-list-iterator-start-at-a-given-index