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.

Notice

You don't need to implement the remove method.

Have you met this question in a real interview?

Yes

Example

  • 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].

  • 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].

/**

* // This is the interface that allows for creating nested lists.

* // You should not implement it, or speculate about its implementation

* class NestedInteger {

* public:

* // Return true if this NestedInteger holds a single integer,

* // rather than a nested list.

* bool isInteger() const;

*

* // Return the single integer that this NestedInteger holds,

* // if it holds a single integer

* // The result is undefined if this NestedInteger holds a nested list

* int getInteger() const;

*

* // Return the nested list that this NestedInteger holds,

* // if it holds a nested list

* // The result is undefined if this NestedInteger holds a single integer

* const vector<NestedInteger> &getList() const;

* };

*/

class NestedIterator {

private:

stack&lt;NestedInteger&gt; s;

public:

NestedIterator\(vector&lt;NestedInteger&gt; &nestedList\) {

    // Initialize your data structure here.

    for \(int i = nestedList.size\(\) - 1; i &gt;= 0; --i\) {

        s.push\(nestedList\[i\]\);

    }

}



// @return {int} the next element in the iteration

int next\(\) {

    // Write your code here

    int res = s.top\(\).getInteger\(\); s.pop\(\);

    return res;

}



// @return {boolean} true if the iteration has more element or false

bool hasNext\(\) {

    // Write your code here

    while \(!s.empty\(\)\) {

        if \(s.top\(\).isInteger\(\)\) {

            return true;

        }

        vector&lt;NestedInteger&gt; list = s.top\(\).getList\(\); s.pop\(\);

        for \(int i = list.size\(\) - 1; i &gt;= 0; --i\) {

            s.push\(list\[i\]\);

        }

    }



    return false;

}

};

/**

* Your NestedIterator object will be instantiated and called as such:

* NestedIterator i(nestedList);

* while (i.hasNext()) v.push_back(i.next());

*/

results matching ""

    No results matching ""