Skip to content

Commit 34657c4

Browse files
committed
fd
1 parent 658bc8b commit 34657c4

File tree

2 files changed

+38
-39
lines changed

2 files changed

+38
-39
lines changed

solution/src/main/java/com/inuker/solution/ZigzagIterator.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ZigzagIterator {
1515

1616
private List<Iterator<Integer>> mIterators = new ArrayList<>();
1717

18-
private int mCurIdx;
18+
private int mIndex;
1919

2020
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
2121
init(v1, v2);
@@ -30,20 +30,18 @@ private void init(List<Integer>... lists) {
3030
}
3131

3232
public int next() {
33-
return mIterators.get(mCurIdx++).next();
33+
mIndex %= mIterators.size();
34+
Iterator<Integer> iterator = mIterators.get(mIndex);
35+
int n = iterator.next();
36+
if (!iterator.hasNext()) {
37+
mIterators.remove(iterator);
38+
} else {
39+
mIndex++;
40+
}
41+
return n;
3442
}
3543

3644
public boolean hasNext() {
37-
while (!mIterators.isEmpty()) {
38-
mCurIdx %= mIterators.size();
39-
40-
Iterator<Integer> cur = mIterators.get(mCurIdx);
41-
42-
if (cur.hasNext()) {
43-
return true;
44-
}
45-
mIterators.remove(mCurIdx);
46-
}
47-
return false;
45+
return !mIterators.isEmpty();
4846
}
4947
}

test/src/main/java/com/inuker/test/main.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.leetcode.library.TreeNode;
88

99
import java.util.ArrayList;
10+
import java.util.Arrays;
1011
import java.util.Collections;
1112
import java.util.Comparator;
1213
import java.util.Iterator;
@@ -17,43 +18,43 @@
1718
public class main {
1819

1920
public static void main(String[] args) {
21+
ZigzagIterator iterator = new ZigzagIterator(
22+
Arrays.asList(1,2,3),
23+
Arrays.asList(4,5,6,7),
24+
Arrays.asList(8,9));
25+
while (iterator.hasNext()) {
26+
System.out.print(iterator.next() + " ");
27+
}
2028
}
2129

22-
class PeekingIterator implements Iterator<Integer> {
23-
24-
private Integer mNext;
30+
public static class ZigzagIterator {
2531

26-
private Iterator<Integer> mIterator;
27-
28-
public PeekingIterator(Iterator<Integer> iterator) {
29-
// initialize any member here.
30-
mIterator = iterator;
31-
}
32+
private List<Iterator<Integer>> mIterators;
33+
private int mIndex;
3234

33-
// Returns the next element in the iteration without advancing the iterator.
34-
public Integer peek() {
35-
if (mNext != null) {
36-
return mNext;
35+
public ZigzagIterator(List<Integer>... args) {
36+
mIterators = new LinkedList<>();
37+
for (List<Integer> list : args) {
38+
if (!list.isEmpty()) {
39+
mIterators.add(list.iterator());
40+
}
3741
}
38-
mNext = mIterator.next();
39-
return mNext;
4042
}
4143

42-
// hasNext() and next() should behave the same as in the Iterator interface.
43-
// Override them if needed.
44-
@Override
45-
public Integer next() {
46-
if (mNext != null) {
47-
Integer ret = mNext;
48-
mNext = null;
49-
return ret;
44+
public int next() {
45+
mIndex %= mIterators.size();
46+
Iterator<Integer> iterator = mIterators.get(mIndex);
47+
int n = iterator.next();
48+
if (!iterator.hasNext()) {
49+
mIterators.remove(iterator);
50+
} else {
51+
mIndex++;
5052
}
51-
return mIterator.next();
53+
return n;
5254
}
5355

54-
@Override
5556
public boolean hasNext() {
56-
return mNext != null || mIterator.hasNext();
57+
return !mIterators.isEmpty();
5758
}
5859
}
5960
}

0 commit comments

Comments
 (0)