File tree Expand file tree Collapse file tree 1 file changed +24
-13
lines changed Expand file tree Collapse file tree 1 file changed +24
-13
lines changed Original file line number Diff line number Diff line change 1
1
public class NestedIterator implements Iterator <Integer > {
2
- private Queue <NestedInteger > q ;
2
+ private Deque <Iterator <NestedInteger >> st ;
3
+ private Integer next ;
3
4
4
5
public NestedIterator (List <NestedInteger > nestedList ) {
5
- q = new LinkedList <>();
6
- flatten (nestedList );
6
+ st = new ArrayDeque <>();
7
+ st .push (nestedList .iterator ());
8
+ advance ();
7
9
}
8
10
9
- private void flatten (List <NestedInteger > nestedList ) {
10
- if (nestedList == null ) {
11
- return ;
12
- }
11
+ private void advance () {
12
+ next = null ;
13
+
14
+ while (!st .isEmpty ()) {
15
+ Iterator <NestedInteger > it = st .peekFirst ();
13
16
14
- for (NestedInteger n : nestedList ) {
15
- if (n .isInteger ()) {
16
- q .offer (n );
17
+ if (!it .hasNext ()) {
18
+ st .pollFirst ();
17
19
} else {
18
- flatten (n .getList ());
20
+ NestedInteger n = it .next ();
21
+
22
+ if (n .isInteger ()) {
23
+ next = n .getInteger ();
24
+ return ;
25
+ } else {
26
+ st .push (n .getList ().iterator ());
27
+ }
19
28
}
20
29
}
21
30
}
22
31
23
32
@ Override
24
33
public Integer next () {
25
- return hasNext () ? q .poll ().getInteger () : null ;
34
+ Integer n = next ;
35
+ advance ();
36
+ return n ;
26
37
}
27
38
28
39
@ Override
29
40
public boolean hasNext () {
30
- return ! q . isEmpty () ;
41
+ return next != null ;
31
42
}
32
43
}
You can’t perform that action at this time.
0 commit comments