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());
    }
}
相关推荐
a31582380631 分钟前
Android Framework开发知识点整理
android·java·linux·服务器·framework·android源码开发
苏小瀚33 分钟前
[算法]---路径问题
数据结构·算法·leetcode
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 个人健康管理系统为例,包含答辩的问题和答案
java·spring boot
局外人Inside1 小时前
PostProcessingBeanDeserializer 使用指南
java
郑州光合科技余经理1 小时前
基于PHP:海外版同城O2O系统多语言源码解决方案
java·开发语言·git·spring cloud·uni-app·php·uniapp
月明长歌1 小时前
【码道初阶】一道经典简单题:多数元素(LeetCode 169)|Boyer-Moore 投票算法详解
算法·leetcode·职场和发展
IT_Octopus1 小时前
Java GZip 压缩实践 +实践思考 +进一步压榨性能和存储方案思考:Protobuf+ GZip
java·spring boot
毕设源码-郭学长2 小时前
【开题答辩全过程】以 高校教材大管家系统为例,包含答辩的问题和答案
java·spring boot
Gavin在路上2 小时前
DDD之用事件风暴重构“电商订单履约”(11)
java·前端·重构
AnAnCode2 小时前
ECS 架构 (Entity Component System) - 数据导向编程快速入门
java·架构·游戏服务器