资讯专栏INFORMATION COLUMN

Zigzag Iterator

Meathill / 1016人阅读

摘要:题目链接这道题是说有两个,来回返回两个里面的值,要求用来做。所以可以用两个来分别存这两个的值,再用一个指针来表示现在应该取哪个里面的值。这里用之后,如果一个循环结束,可以直接把它移除,然后就可以直接判断是否是空。

Zigzag Iterator

题目链接:https://leetcode.com/problems...

这道题是说有两个list,来回返回两个list里面的值,要求用iterator来做。所以可以用两个iterator来分别存这两个list的值,再用一个int指针来表示现在应该取哪个list里面的值。

public class ZigzagIterator {
    Iterator l1, l2;
    int point;
    public ZigzagIterator(List v1, List v2) {
        l1 = v1.iterator();
        l2 = v2.iterator();
        point = 0;
    }

    public int next() {
        if(!hasNext()) return -1;
        if(point == 0) {
            point = 1;
            return l1.next();
        }
        else {
            point = 0;
            return l2.next();
        }
    }

    public boolean hasNext() {
        if(!l1.hasNext() && point == 0) point = 1;
        if(!l2.hasNext() && point == 1) point = 0;
        return l1.hasNext() || l2.hasNext();
    }
}

如果要扩展成k个list,那么可以用一个list来存所有的list里面的值。还是需要一个指针,思路和两个的时候差不多。这里用list之后,如果一个iterator循环结束,可以直接把它移除,然后next()就可以直接判断list是否是空。

public class ZigzagIterator {
    List> list;
    int point;
    public ZigzagIterator(List v1, List v2) {
        list = new LinkedList();
        if(v1 != null) list.add(v1.iterator());
        if(v2 != null) list.add(v2.iterator());
        point = 0;
    }

    public int next() {
        int result = list.get(point).next();
        point = (point + 1) % list.size();
        return result;
    }

    public boolean hasNext() {
        if(list.get(point).hasNext()) return true;
        int i = point;
        while(i < list.size()) {
            if(!list.get(i).hasNext()) list.remove(i);
            else return true;
        }
        while(list.size() > 0) {
            if(!list.get(0).hasNext()) list.remove(0);
            else {
                point = 0;
                return true;
            }
        }
        return false;
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66558.html

相关文章

  • [Leetcode] Zigzag Iterator Z形迭代器

    摘要:用变量和取模来判断我们该取列表中的第几个迭代器。同样,由于每用完一个迭代器后都要移出一个,变量也要相应的更新为该迭代器下标的上一个下标。如果迭代器列表为空,说明没有下一个了。 Zigzag Iterator Given two 1d vectors, implement an iterator to return their elements alternately. For exa...

    SolomonXie 评论0 收藏0
  • 【LC总结】Iterator题目<Zigzag 1&2><BST>&

    摘要:方法直接查找数组的位的迭代器,调用方法得到的整数即为要返回的元素。再写迭代器的方法返回指针元素的并让指针通过递归方法指向下一个元素。 Zigzag Iterator Problem Given two 1d vectors, implement an iterator to return their elements alternately. Example Given two 1d ...

    WelliJhon 评论0 收藏0
  • leetcode 341 Flatten Nested List Iterator 以及其他Iter

    摘要:返回的是表示是否走到了结尾。起到的就是缓存作用,因为调用之后马上就走到下一个了。如果调用,返回用得到和最初的输入相同的做相同的步骤存入不断拆开得到结果。思想就是来自括号,后面也会跟进的专题 Iterator其实就是一个单链表,无法回头看。java里很多数据结构都有这个接口,使用时需要initalize,得到一个iterator. 调用next()返回的是一个object, 指向的是下一...

    chaosx110 评论0 收藏0
  • [LintCode/LeetCode] Binary Tree Zigzag Level Orde

    Problem Given a binary tree, return the zigzag level order traversal of its nodes values. (ie, from left to right, then right to left for the next level and alternate between). Example Given binary tr...

    AlphaGooo 评论0 收藏0
  • [LeetCode] ZigZag Conversion

    摘要:很奇葩的题目,先将转化为字符数组,便于操作。再看要求转化为多少行,就建立多大的数组。 Problem The string PAYPALISHIRING is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed ...

    TIGERB 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<