281. Zigzag Iterator - cocoder39/coco39_LC GitHub Wiki
the program can be easily extend to k input 1d vectors version through the minor change below.
while (its[next_it] == ends[next_it]) {
next_it = (next_it + 1) % sz;
}
class ZigzagIterator {
public:
ZigzagIterator(vector<int>& v1, vector<int>& v2) {
sz = 2;
next_it = 0;
it0 = v1.begin();
end0 = v1.end();
it1 = v2.begin();
end1 = v2.end();
}
int next() {
if ((next_it == 0 && it0 == end0) || (next_it == 1 && it1 == end1)) {
next_it = (next_it + 1) % sz;
}
vector<int>::iterator& it = next_it == 0 ? it0 : it1;
int res = *(it++);
next_it = (next_it + 1) % sz;
return res;
}
bool hasNext() {
return it0 != end0 || it1 != end1;
}
private:
vector<int>::iterator it0, end0, it1, end1;
int next_it;
int sz;
};