1 /**
2 * // This is the interface that allows for creating nested lists.
3 * // You should not implement it, or speculate about its implementation
4 * class NestedInteger {
5 * public:
6 * // Return true if this NestedInteger holds a single integer,
7 * // rather than a nested list.
8 * bool isInteger() const;
9 *
10 * // Return the single integer that this NestedInteger holds,
11 * // if it holds a single integer
12 * // The result is undefined if this NestedInteger holds a nested list
13 * int getInteger() const;
14 *
15 * // Return the nested list that this NestedInteger holds,
16 * // if it holds a nested list
17 * // The result is undefined if this NestedInteger holds a single integer
18 * const vector<NestedInteger> &getList() const;
19 * };
20 */
21 class NestedIterator {
22 public:
23 vector<int> v;
24 int cnt;
25 int nested_size;
26 NestedIterator(vector<NestedInteger> &nestedList) {
27 // Initialize your data structure here.
28 v.clear();
29 cnt = 0;
30 dfs(nestedList);
31 nested_size = v.size();
32 }
33
34 // @return {int} the next element in the iteration
35 int next() {
36 // Write your code here
37 return v[cnt++];
38 }
39
40 // @return {boolean} true if the iteration has more element or false
41 bool hasNext() {
42 // Write your code here
43 if(nested_size){
44 nested_size = nested_size - 1;
45 return true;
46 } else {
47 return false;
48 }
49 }
50
51 void dfs(vector<NestedInteger> nestedList){
52 for(int i = 0; i < nestedList.size(); ++i){
53 if(nestedList[i].isInteger()){
54 v.push_back(nestedList[i].getInteger());
55 } else {
56 dfs(nestedList[i].getList());
57 }
58 }
59 }
60 };
61 /**
62 * Your NestedIterator object will be instantiated and called as such:
63 * NestedIterator i(nestedList);
64 * while (i.hasNext()) v.push_back(i.next());
65 */