LeetCode第284题 - 窥视迭代器
题目
解答一
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.htmlimport 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.@Overridepublic Integer next() {++nextIndex;return valuesIterator.next();}@Overridepublic boolean hasNext() {return valuesIterator.hasNext();}
}
//leetcode submit region end(Prohibit modification and deletion)
解答二
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.htmlimport 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.@Overridepublic Integer next() {return valuesIterator.next();}@Overridepublic boolean hasNext() {return valuesIterator.hasNext();}
}
//leetcode submit region end(Prohibit modification and deletion)
测试用例
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;@Testpublic 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());}
}