281. Zigzag Iterator - cocoder39/coco39_LC GitHub Wiki

281. Zigzag Iterator

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;
};
⚠️ **GitHub.com Fallback** ⚠️