/**
 * // 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<NestedInteger>* NI_stack = new stack<NestedInteger>();
    void pushVecIntoStack(vector<NestedInteger> &nestedList) {
        stack<NestedInteger>* tmp = new stack<NestedInteger>();
        for(NestedInteger ni : nestedList) {
            tmp->push(ni);
        }
        while (!tmp->empty()) {
            NI_stack->push(tmp->top());
            tmp->pop();
        }
        delete tmp;
        return;
    }


public:
    NestedIterator(vector<NestedInteger> &nestedList) {
        // Initialize your data structure here.
        pushVecIntoStack(nestedList);
    }

    ~NestedIterator() {
        delete NI_stack;
    }

    // @return {int} the next element in the iteration
    int next() {
        // Write your code here
        if (!hasNext()) {
            return INT_MAX;
        } else {
            int topInt = NI_stack->top().getInteger();
            NI_stack->pop();
            return topInt;
        }
    }

    // @return {boolean} true if the iteration has more element or false
    bool hasNext() {
        // Write your code here
        while (!NI_stack->empty() && !NI_stack->top().isInteger()) {
            vector<NestedInteger> topVec = NI_stack->top().getList();
            NI_stack->pop();
            pushVecIntoStack(topVec);
        }

        return !NI_stack->empty();
    }
};

/**
 * 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 ""