Zigzag Iterator

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

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

public class ZigzagIterator {
    Iterator<Integer> l1, l2;
    int point;
    public ZigzagIterator(List<Integer> v1, List<Integer> 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<Interator>来存所有的list里面的值。还是需要一个指针,思路和两个的时候差不多。这里用list之后,如果一个iterator循环结束,可以直接把它移除,然后next()就可以直接判断list是否是空。

public class ZigzagIterator {
    List<Iterator<Integer>> list;
    int point;
    public ZigzagIterator(List<Integer> v1, List<Integer> 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;
    }
}

lulouch13
13 声望6 粉丝

« 上一篇
Word Squares
下一篇 »
The Maze II