本题其实我用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();*/
