281. Zigzag Iterator
Approach 1: Keep track of list number, item number pair
class ZigzagIterator(object):
    def __init__(self, v1, v2):
        """
        Initialize your data structure here.
        :type v1: List[int]
        :type v2: List[int]
        """
        self.curr = 0
        self.idx = [0, 0]
        self.arr = [v1, v2]
        self.size = 2
    def next(self):
        """
        :rtype: int
        """
        if self.idx[self.curr] == len(self.arr[self.curr]):
            del self.arr[self.curr]
            del self.idx[self.curr]
            self.size -= 1
            self.curr = (self.curr) % self.size
        ret = self.arr[self.curr][self.idx[self.curr]]
        self.idx[self.curr] += 1
        self.curr = (self.curr + 1) % self.size
        return ret
    def hasNext(self):
        """
        :rtype: bool
        """
        for i in range(self.size):
            if self.idx[i] < len(self.arr[i]):
                return True
        return False       
# Your ZigzagIterator object will be instantiated and called as such:
# i, v = ZigzagIterator(v1, v2), []
# while i.hasNext(): v.append(i.next())Storing the index number of current element in each list allows us to iterate over each of the lists to return the elements one by one.
Time Complexity: O(N), where N = length(v1) + length(v2)
Space Complexity: O(N), where N = length(v1) + length(v2)
Last updated