Description
Given two 1d vectors, implement an iterator to return their elements alternately.Example
Example1
Input: v1 = [1, 2] and v2 = [3, 4, 5, 6]
Output: [1, 3, 2, 4, 5, 6]
Explanation:
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1, 3, 2, 4, 5, 6].
Example2
Input: v1 = [1, 1, 1, 1] and v2 = [3, 4, 5, 6] Output: [1, 3, 1, 4, 1, 5, 1, 6]
思路:用双指针求解即可,交叉返回两数组当前位置的数,当一个数组被访问完后,就一直访问另一个数组
public class ZigzagIterator { public Iterator<Integer> it1; public Iterator<Integer> it2; public int turns; /** * @param v1 v2 two 1d vectors */ public ZigzagIterator(List<Integer> v1, List<Integer> v2) { // initialize your data structure here. this.it1 = v1.iterator(); this.it2 = v2.iterator(); turns = 0; } public int next() { // Write your code here turns++; if((turns % 2 == 1 && it1.hasNext()) || (!it2.hasNext())) { return it1.next(); } else if((turns % 2 == 0 && it2.hasNext()) || (!it1.hasNext())) { return it2.next(); } return -1; } public boolean hasNext() { // Write your code here return it1.hasNext() || it2.hasNext(); } } /** * Your ZigzagIterator object will be instantiated and called as such: * ZigzagIterator solution = new ZigzagIterator(v1, v2); * while (solution.hasNext()) result.add(solution.next()); * Output result */