本题其实我用inner index + outer index的方法做出来了,但是不够简洁,相比于直接用iterator,也更容易犯错
    本题也是一个学习iterator相关API的机会。

    • 使用Queue<Iterator<Integer>>来存储v1v2iterator

    看代码很容易懂,比长篇大论要容易多了

    1. public class ZigzagIterator {
    2. Queue<Iterator<Integer>> queue;
    3. public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
    4. queue = new LinkedList<>();
    5. if (v1 != null) {
    6. Iterator<Integer> v1Iter = v1.iterator();
    7. if (v1Iter.hasNext()) {
    8. queue.offer(v1Iter);
    9. }
    10. }
    11. if (v2 != null) {
    12. Iterator<Integer> v2Iter = v2.iterator();
    13. if (v2Iter.hasNext()) {
    14. queue.offer(v2Iter);
    15. }
    16. }
    17. }
    18. public int next() {
    19. if (!hasNext()) {
    20. throw new java.util.NoSuchElementException();
    21. }
    22. else {
    23. Iterator<Integer> v1Iter = queue.poll();
    24. int elem = v1Iter.next();
    25. if (v1Iter.hasNext()) {
    26. queue.offer(v1Iter);
    27. }
    28. return elem;
    29. }
    30. }
    31. public boolean hasNext() {
    32. return !queue.isEmpty();
    33. }
    34. }
    35. /**
    36. * Your ZigzagIterator object will be instantiated and called as such:
    37. * ZigzagIterator i = new ZigzagIterator(v1, v2);
    38. * while (i.hasNext()) v[f()] = i.next();
    39. */