LeetCode第284题 - 窥视迭代器

题目

解答一

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());
    }
}
相关推荐
lee_curry3 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
smj2302_796826524 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
九转成圣5 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
直奔標竿5 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵5 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
野生技术架构师7 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
_深海凉_8 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
小袁拒绝摆烂8 小时前
多表关联大平层转JSON树形结构
java·json
ja哇8 小时前
大厂面试高频八股
java·面试·职场和发展