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; };