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());
    }
}
相关推荐
宸丶一5 分钟前
Day 10:LangGraph - Agent 的图执行引擎
java·windows·python
hikktn6 分钟前
Excel 导出 OOM 预防实战:30 万行从堆溢出到 50MB 的演进
java·excel·easyexcel
风味蘑菇干8 分钟前
WTomcat服务器
java·服务器
燕-孑26 分钟前
tomcat详解(基础到高级生产)
java·tomcat
码不停蹄的玄黓34 分钟前
Spring Bean 生命周期
java·后端·spring
西安邮电大学1 小时前
分治算法详细讲解
java·后端·其他·算法·面试
摇滚侠1 小时前
Mybatis 入门到项目实战 搭建 MyBatis 框架 01-14
java·tomcat·mybatis
码不停蹄的玄黓1 小时前
SpringBoot 全局异常处理器实现
java·spring boot·后端
小高学习java2 小时前
事务的边界问题,如何判断数据回滚时机。
java·数据库·后端
何极光2 小时前
Maven安装与配置
java·maven