Design-341. Flatten Nested List Iterator

Given a nested list of integers, implement an iterator to flatten it.

Each element is either an integer, or a list -- whose elements may also be integers or other lists.

Example 1:
Given the list [[1,1],2,[1,1]],

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1].

Example 2:
Given the list [1,[4,[6]]],

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,4,6].

class NestedIterator {  
public:  
    NestedIterator(vector<NestedInteger> &nestedList) {  
        flat(nestedList);  
        listIter = mList.begin();  
    }  
      
    int next() {  
        int res = *listIter;  
        ++listIter;  
        return res;  
    }  
  
    bool hasNext() {  
        return listIter != mList.end();  
    }  
      
    void flat(vector<NestedInteger>& nL){  
        for (auto &it : nL) {  
            if (it.isInteger())  
                mList.push_back(it.getInteger());  
            else   
                flat(it.getList());  
        }  
    }  
      
private:  
    list<int>::iterator listIter;  
    list<int>mList;  
};  
原文地址:https://www.cnblogs.com/msymm/p/8278223.html