341. Flatten Nested List Iterator

碰到这个是挺不懂的

就是设计一个stack,然后每次调用hasNext()的时候就把最后一个元素展开,循环,直到展开到有single interger为止

 1 /**
 2  * // This is the interface that allows for creating nested lists.
 3  * // You should not implement it, or speculate about its implementation
 4  * public interface NestedInteger {
 5  *
 6  *     // @return true if this NestedInteger holds a single integer, rather than a nested list.
 7  *     public boolean isInteger();
 8  *
 9  *     // @return the single integer that this NestedInteger holds, if it holds a single integer
10  *     // Return null if this NestedInteger holds a nested list
11  *     public Integer getInteger();
12  *
13  *     // @return the nested list that this NestedInteger holds, if it holds a nested list
14  *     // Return null if this NestedInteger holds a single integer
15  *     public List<NestedInteger> getList();
16  * }
17  */
18 public class NestedIterator implements Iterator<Integer> {
19     Stack<NestedInteger> stack;
20 
21     public NestedIterator(List<NestedInteger> nestedList) {
22         stack = new Stack<NestedInteger>();
23         for(int i = nestedList.size() - 1; i >= 0; i--) {
24             stack.push(nestedList.get(i));
25         }
26     }
27 
28     @Override
29     public Integer next() {
30         return stack.pop().getInteger();
31     }
32 
33     @Override
34     public boolean hasNext() {
35         while(!stack.isEmpty()) {
36             NestedInteger cur = stack.peek();
37             if(cur.isInteger()) {
38                 return true;
39             }
40             stack.pop();
41             List<NestedInteger> curList = cur.getList();
42             for(int i = curList.size() - 1; i >= 0; i--) {
43                 stack.push(curList.get(i));
44             }
45         }
46         return false;
47     }
48 }
49 
50 /**
51  * Your NestedIterator object will be instantiated and called as such:
52  * NestedIterator i = new NestedIterator(nestedList);
53  * while (i.hasNext()) v[f()] = i.next();
54  */

 

posted @ 2016-07-30 02:25  warmland  阅读(131)  评论(0编辑  收藏  举报