|
11 | 11 | * public Integer getInteger(); |
12 | 12 | * |
13 | 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 |
| 14 | + * // Return empty list if this NestedInteger holds a single integer |
15 | 15 | * public List<NestedInteger> getList(); |
16 | 16 | * } |
17 | 17 | */ |
18 | 18 | public class NestedIterator implements Iterator<Integer> { |
19 | | - List<NestedInteger> nestedList; |
20 | | - Queue<Integer> queue; |
21 | | - int idx; |
| 19 | + |
| 20 | + private Stack<NestedInteger> stack; |
| 21 | + |
22 | 22 | public NestedIterator(List<NestedInteger> nestedList) { |
23 | | - this.nestedList = nestedList; |
24 | | - queue = new LinkedList<>(); |
25 | | - idx = 0; |
26 | | - addToQueue(); |
| 23 | + stack = new Stack<>(); |
| 24 | + for (int i = nestedList.size() - 1; i >= 0; i--) { |
| 25 | + stack.push(nestedList.get(i)); |
| 26 | + } |
27 | 27 | } |
28 | 28 |
|
29 | 29 | @Override |
30 | 30 | public Integer next() { |
31 | | - int val = queue.remove(); |
32 | | - if (queue.isEmpty()) { |
33 | | - if (idx != nestedList.size()) { |
34 | | - addToQueue(); |
35 | | - } |
36 | | - } |
37 | | - return val; |
38 | | - } |
39 | | - |
40 | | - private void addToQueue() { |
41 | | - while (idx < nestedList.size() && queue.isEmpty()) { |
42 | | - addToQueueHelper(nestedList.get(idx++)); |
43 | | - } |
| 31 | + return stack.pop().getInteger(); |
44 | 32 | } |
45 | 33 |
|
46 | | - private void addToQueueHelper(NestedInteger ns) { |
47 | | - if (ns.isInteger()) { |
48 | | - queue.add(ns.getInteger()); |
49 | | - } |
50 | | - else { |
51 | | - for (NestedInteger ni : ns.getList()) { |
52 | | - addToQueueHelper(ni); |
53 | | - } |
54 | | - } |
55 | | - } |
56 | | - |
57 | 34 | @Override |
58 | 35 | public boolean hasNext() { |
59 | | - return !(queue.isEmpty() && idx == nestedList.size()); |
| 36 | + while (!stack.isEmpty() && !stack.peek().isInteger()) { |
| 37 | + NestedInteger popped = stack.pop(); |
| 38 | + if (popped == null) { |
| 39 | + continue; |
| 40 | + } |
| 41 | + List<NestedInteger> list = popped.getList(); |
| 42 | + for (int i = list.size() - 1; i >= 0; i--) { |
| 43 | + stack.push(list.get(i)); |
| 44 | + } |
| 45 | + } |
| 46 | + return !stack.isEmpty(); |
60 | 47 | } |
61 | 48 | } |
62 | 49 |
|
|
0 commit comments