博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Peeking Iterator
阅读量:4676 次
发布时间:2019-06-09

本文共 2516 字,大约阅读时间需要 8 分钟。

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:

  1. Think of "looking ahead". You want to cache the next element.
  2. Is one variable sufficient? Why or why not?
  3. Test your design with call order of peek() before next() vs next() before peek().
  4. For a clean implementation, check out .

Follow up: How would you extend your design to be generic and work with all types, not just integer?

 

1 // Below is the interface for Iterator, which is already defined for you. 2 // **DO NOT** modify the interface for Iterator. 3 class Iterator { 4     struct Data; 5     Data* data; 6 public: 7     Iterator(const vector
& nums); 8 Iterator(const Iterator& iter); 9 virtual ~Iterator();10 // Returns the next element in the iteration.11 int next();12 // Returns true if the iteration has more elements.13 bool hasNext() const;14 };15 16 17 class PeekingIterator : public Iterator {18 private:19 bool hasPeeked;20 int peekElement;21 public:22 PeekingIterator(const vector
& nums) : Iterator(nums) {23 // Initialize any member here.24 // **DO NOT** save a copy of nums and manipulate it directly.25 // You should only use the Iterator interface methods.26 hasPeeked = false;27 }28 29 // Returns the next element in the iteration without advancing the iterator.30 int peek() {31 if (!hasPeeked) {32 hasPeeked = true;33 peekElement = Iterator::next();34 }35 return peekElement;36 }37 38 // hasNext() and next() should behave the same as in the Iterator interface.39 // Override them if needed.40 int next() {41 if (!hasPeeked) {42 return Iterator::next();43 }44 hasPeeked = false;45 return peekElement;46 }47 48 bool hasNext() const {49 return hasPeeked || Iterator::hasNext();50 }51 };

 

转载于:https://www.cnblogs.com/easonliu/p/4826936.html

你可能感兴趣的文章
Systemd 初始化进程
查看>>
【C#学习笔记】文本复制到粘贴板
查看>>
Windows store 验证你的 URL http:// 和 https:// ms-appx:/// ms-appdata:///local
查看>>
python全栈开发_day7_字符编码,以及文件的基本读取
查看>>
js 验证码 倒计时60秒
查看>>
C#基础
查看>>
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 15. 用户管理
查看>>
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
算法分析常用记号
查看>>
spring mvc 返回类型
查看>>
[js高手之路] html5 canvas动画教程 - 匀速运动
查看>>
11.VS2015常用快捷键大全
查看>>
js学习总结----less常用的方法
查看>>
需求分析问卷调查及反馈结果
查看>>
当深度学习遇见自动文本摘要
查看>>
心随手动,驱动短视频热潮的引擎
查看>>
Servlet深入之初始化
查看>>
python中出现IndentationError:unindent does not match any outer indentation level错误
查看>>
<mvc:annotation-driven />与<context:annotation-config/>
查看>>
【UML】概念、关联、画画(一)
查看>>