Skip to content

Commit 4e3224d

Browse files
authored
Update Flatten Nested List Iterator.java
1 parent c10ed38 commit 4e3224d

File tree

1 file changed

+20
-33
lines changed

1 file changed

+20
-33
lines changed

Medium/Flatten Nested List Iterator.java

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,52 +11,39 @@
1111
* public Integer getInteger();
1212
*
1313
* // @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
1515
* public List<NestedInteger> getList();
1616
* }
1717
*/
1818
public class NestedIterator implements Iterator<Integer> {
19-
List<NestedInteger> nestedList;
20-
Queue<Integer> queue;
21-
int idx;
19+
20+
private Stack<NestedInteger> stack;
21+
2222
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+
}
2727
}
2828

2929
@Override
3030
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();
4432
}
4533

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-
5734
@Override
5835
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();
6047
}
6148
}
6249

0 commit comments

Comments
 (0)