LeetCode:Peeking Iterator
2016-06-01 17:46
369 查看
Peeking Iterator
Total Accepted: 20942 TotalSubmissions: 62056 Difficulty: Medium
Given an Iterator class interface with methods:
next()and
hasNext(),
design and implement a PeekingIterator that support
the
peek()operation -- it essentially peek()
at the element that will be returned by the next call to next().
Here is an example. Assume that the iterator is initialized to the beginning of the list:
[1, 2, 3].
Call
next()gets you 1, the first element
in the list.
Now you call
peek()and it returns 2, the
next element. Calling
next()after that still return
2.
You call
next()the final time and it returns
3, the last element. Calling
hasNext()after that should return false.
Hint:
Think of "looking ahead". You want to cache the next element.
Is one variable sufficient? Why or why not?
Test your design with call order of
peek()before
next()vs
next()before
peek().
For a clean implementation, check out Google's
guava library source code.
Follow up: How would you extend your design to be generic and work with all types, not just integer?
Credits:
Special thanks to @porker2008 for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
Hide Tags
Design
Hide Similar Problems
(M) Binary Search Tree Iterator (M)
Flatten 2D Vector (M) Zigzag Iterator
思路:
将“下一个”数缓存起来。
java code:
// Java Iterator interface reference: // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html class PeekingIterator implements Iterator<Integer> { private Integer next; private Iterator<Integer> iterator; public PeekingIterator(Iterator<Integer> iterator) { // initialize any member here. this.iterator = iterator; if(iterator.hasNext()) next = iterator.next(); } // Returns the next element in the iteration without advancing the iterator. public Integer peek() { return next; } // hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. @Override public Integer next() { Integer tmp = next; next = iterator.hasNext() ? iterator.next() : null; return tmp; } @Override public boolean hasNext() { return next != null; } }
相关文章推荐
- 浅谈ACC测试建模
- iOS UIButton
- 第14周项目3-数组类模板
- restrict:限制指令的出现位置
- nginx修改配置之后语法检查通过但是不生效
- 在cygwin下面编译需要winpcap(libpcap)的工程
- C++的头文件和实现文件分别写什么
- Maqetta
- 三种Android适配器
- js中url中文参数乱码问题
- 第13周项目1:分数类中的运算符重载(4)
- 第10章 C语言及程序设计提高例程-37 操作字符串数组
- Android 自定义 Application 多次调用
- 【HDU 1588】Gauss Fibonacci(矩阵快速幂+二分)
- android中判断EditText的内容是否为空
- HTTP的请求方法OPTIONS
- 生活协奏曲
- 什么是EPEL 及 Centos上安装EPEL(转)
- nginx+tomcat集群负载均衡(实现session复制)
- js中的prototype