数据结构设计类题目,参考网上的代码:
/** * // 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 { public: NestedIterator(vector<NestedInteger> &nestedList) { begins.push(nestedList.begin()); ends.push(nestedList.end()); } int next() { return (begins.top()++)->getInteger(); } bool hasNext() { while(begins.size()) { if(begins.top() == ends.top()) { begins.pop(); ends.pop(); } else { auto val = begins.top(); if(val->isInteger()) return true; begins.top()++; begins.push(val->getList().begin()); ends.push(val->getList().end()); } } return false; } private: stack<vector<NestedInteger>::iterator> begins, ends; }; /** * Your NestedIterator object will be instantiated and called as such: * NestedIterator i(nestedList); * while (i.hasNext()) cout << i.next(); */