解答一
java
package leetcode.editor.cn;
//leetcode submit region begin(Prohibit modification and deletion)
// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
import java.util.Iterator;
import java.util.LinkedList;
class PeekingIterator implements Iterator<Integer> {
private LinkedList<Integer> values = new LinkedList<>();
private Iterator<Integer> valuesIterator = null;
private int nextIndex = 0;
public PeekingIterator(Iterator<Integer> iterator) {
// initialize any member here.
while (iterator.hasNext()) {
values.addLast(iterator.next());
}
valuesIterator = values.iterator();
}
// Returns the next element in the iteration without advancing the iterator.
public Integer peek() {
return values.get(nextIndex);
}
// hasNext() and next() should behave the same as in the Iterator interface.
// Override them if needed.
@Override
public Integer next() {
++nextIndex;
return valuesIterator.next();
}
@Override
public boolean hasNext() {
return valuesIterator.hasNext();
}
}
//leetcode submit region end(Prohibit modification and deletion)
解答二
java
package leetcode.editor.cn;
//leetcode submit region begin(Prohibit modification and deletion)
// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
class PeekingIterator implements Iterator<Integer> {
private LinkedList<Integer> values = new LinkedList<>();
private ListIterator<Integer> valuesIterator = null;
public PeekingIterator(Iterator<Integer> iterator) {
// initialize any member here.
while (iterator.hasNext()) {
values.addLast(iterator.next());
}
valuesIterator = values.listIterator();
}
// Returns the next element in the iteration without advancing the iterator.
public Integer peek() {
Integer value = valuesIterator.next();
valuesIterator.previous();
return value;
}
// hasNext() and next() should behave the same as in the Iterator interface.
// Override them if needed.
@Override
public Integer next() {
return valuesIterator.next();
}
@Override
public boolean hasNext() {
return valuesIterator.hasNext();
}
}
//leetcode submit region end(Prohibit modification and deletion)
测试用例
java
package leetcode.editor.cn;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class PeekingIteratorTest {
private PeekingIterator iter = null;
@Test
public void test1() {
iter = new PeekingIterator(List.of(1, 2, 3).iterator());
assertTrue(iter.hasNext());
assertTrue(String.valueOf(iter.peek()), iter.peek() == 1);
assertTrue(iter.next() == 1);
assertTrue(iter.hasNext());
assertTrue(String.valueOf(iter.peek()), iter.peek() == 2);
assertTrue(iter.hasNext());
assertTrue(iter.next() == 2);
assertTrue(iter.hasNext());
assertTrue(String.valueOf(iter.peek()), iter.peek() == 3);
assertTrue(iter.next() == 3);
assertFalse(iter.hasNext());
}
}