本题其实我用inner index + outer index的方法做出来了,但是不够简洁,相比于直接用iterator
,也更容易犯错
本题也是一个学习iterator
相关API的机会。
- 使用
Queue<Iterator<Integer>>
来存储v1
和v2
的iterator
看代码很容易懂,比长篇大论要容易多了
public class ZigzagIterator {
Queue<Iterator<Integer>> queue;
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
queue = new LinkedList<>();
if (v1 != null) {
Iterator<Integer> v1Iter = v1.iterator();
if (v1Iter.hasNext()) {
queue.offer(v1Iter);
}
}
if (v2 != null) {
Iterator<Integer> v2Iter = v2.iterator();
if (v2Iter.hasNext()) {
queue.offer(v2Iter);
}
}
}
public int next() {
if (!hasNext()) {
throw new java.util.NoSuchElementException();
}
else {
Iterator<Integer> v1Iter = queue.poll();
int elem = v1Iter.next();
if (v1Iter.hasNext()) {
queue.offer(v1Iter);
}
return elem;
}
}
public boolean hasNext() {
return !queue.isEmpty();
}
}
/**
* Your ZigzagIterator object will be instantiated and called as such:
* ZigzagIterator i = new ZigzagIterator(v1, v2);
* while (i.hasNext()) v[f()] = i.next();
*/