|
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