Zigzag Iterator
Zigzag Iterator
Given two 1d vectors:
v1 = [1, 2]
v2 = [3, 4, 5, 6]
By calling next repeatedly until hasNext returns false,
the order of elements returned by next should be: [1, 3, 2, 4, 5, 6].Basic Idea:
Java Code:
public class ZigzagIterator {
/**
* @param v1 v2 two 1d vectors
*/
List<Integer> lst1;
List<Integer> lst2;
int i1;
int i2;
int next;
boolean nextIs1;
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
this.lst1 = v1;
this.lst2 = v2;
this.i1 = 0;
this.i2 = 0;
this.nextIs1 = true;
this.next = Integer.MIN_VALUE;
}
public int next() {
return next;
}
public boolean hasNext() {
if (i1 == lst1.size() && i2 == lst2.size()) {
return false;
} else if (i1 == lst1.size()) {
next = lst2.get(i2);
i2++;
} else if (i2 == lst2.size()) {
next = lst1.get(i1);
i1++;
} else {
if (nextIs1) {
next = lst1.get(i1);
i1++;
nextIs1 ^= true;
} else {
next = lst2.get(i2);
i2++;
nextIs1 ^= true;
}
}
return true;
}
}