• [Java]LeetCode284. 顶端迭代器 | Peeking Iterator


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10688866.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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().

    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.
    

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


    给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext()。设计并实现一个支持 peek() 操作的顶端迭代器 -- 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。

    示例:

    假设迭代器被初始化为列表 [1,2,3]。
    
    调用 next() 返回 1,得到列表中的第一个元素。
    现在调用 peek() 返回 2,下一个元素。在此之后调用 next() 仍然返回 2。
    最后一次调用 next() 返回 3,末尾元素。在此之后调用 hasNext() 应该返回 false。
    

    进阶:你将如何拓展你的设计?使之变得通用化,从而适应所有的类型,而不只是整数型?


    45ms

     1 class PeekingIterator implements Iterator<Integer> {
     2     Integer next = null;
     3     Iterator<Integer> iterator;
     4     public PeekingIterator(Iterator<Integer> iterator) {
     5         // initialize any member here.
     6         this.iterator = iterator;
     7     }
     8 
     9     // Returns the next element in the iteration without advancing the iterator.
    10     public Integer peek() {
    11         if(next != null){
    12             return next;
    13         }
    14         
    15         this.next = iterator.next();
    16         return next;
    17     }
    18 
    19     // hasNext() and next() should behave the same as in the Iterator interface.
    20     // Override them if needed.
    21     @Override
    22     public Integer next() {
    23         if(next != null){
    24             Integer res = next;
    25             next = null;
    26             return res;
    27         }
    28         
    29         return iterator.next();
    30     }
    31 
    32     @Override
    33     public boolean hasNext() {
    34         return next != null || iterator.hasNext();
    35     }
    36 }

    46ms

     1 // Java Iterator interface reference:
     2 // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
     3 class PeekingIterator implements Iterator<Integer> {
     4     
     5     private LinkedList<Integer> list = new LinkedList<Integer>();
     6 
     7     public PeekingIterator(Iterator<Integer> iterator) {
     8         while (iterator.hasNext()) {
     9             list.add(iterator.next());
    10         }
    11     }
    12 
    13     // Returns the next element in the iteration without advancing the iterator.
    14     public Integer peek() {
    15         if (list.isEmpty()) {
    16             return null;
    17         }
    18         return list.getFirst();
    19     }
    20 
    21     // hasNext() and next() should behave the same as in the Iterator interface.
    22     // Override them if needed.
    23     @Override
    24     public Integer next() {
    25         return list.removeFirst();
    26     }
    27 
    28     @Override
    29     public boolean hasNext() {
    30         return !list.isEmpty();
    31     }
    32 }

    47ms

     1 // Java Iterator interface reference:
     2 // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
     3 public class PeekingIterator implements Iterator<Integer> {
     4 
     5     Iterator<Integer> it;
     6     Integer pre;
     7     public PeekingIterator(Iterator<Integer> iterator) {
     8         // initialize any member here.
     9         it=iterator;
    10         if(it.hasNext())
    11             pre=it.next();
    12     }
    13 
    14     // Returns the next element in the iteration without advancing the iterator.
    15     public Integer peek() {
    16         return pre;
    17         
    18     }
    19 
    20     // hasNext() and next() should behave the same as in the Iterator interface.
    21     // Override them if needed.
    22     @Override
    23     public Integer next() {
    24         int res=pre;
    25         if(it.hasNext())
    26             pre=it.next();
    27         else
    28             pre=null;
    29             
    30         return res;
    31     }
    32 
    33     @Override
    34     public boolean hasNext() {
    35         // return it.hasNext();
    36         return pre!=null;
    37     }
    38 }
  • 相关阅读:
    System.Data.RealonlyException:列Column1被设置为realonly
    学习java过程中
    在windows server 2008下安装vs2005.打开vs2005的时候老提示要“运行vs2005sp1 建议使用管理员权限”
    windows Server 2008下面运行vs2005的问题
    大飞机MIS系统360把我的Transformer.Service服务杀掉了
    开通博客
    C#中怎样让控件显示在其他控件的上面
    vs2010发布问题
    vs在IE8无法调试的解决方法
    将身份证号粘贴到WPS表格后变成了“科学计数法”的解决方案
  • 原文地址:https://www.cnblogs.com/strengthen/p/10688866.html
Copyright © 2020-2023  润新知