Zigzag Iterator 解答

Question

Given two 1d vectors, implement an iterator to return their elements alternately.

For example, given two 1d vectors:

v1 = [1, 2]
v2 = [3, 4, 5, 6]

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1, 3, 2, 4, 5, 6].

Follow up: What if you are given k 1d vectors? How well can your code be extended to such cases?

Solution

This solution is suitable for k vectors.

 1 public class ZigzagIterator {
 2     private List<Iterator> list;
 3 
 4     public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
 5         list = new ArrayList<Iterator>();
 6         if (v1.iterator().hasNext())
 7             list.add(v1.iterator());
 8         if (v2.iterator().hasNext())
 9             list.add(v2.iterator());
10     }
11 
12     public int next() {
13         Iterator<Integer> current = list.remove(0);
14         int result = current.next();
15         if(current.hasNext())
16             list.add(current);
17         return result;        
18     }
19 
20     public boolean hasNext() {
21         return list.size() > 0 ? true : false;
22     }
23 }
24 
25 /**
26  * Your ZigzagIterator object will be instantiated and called as such:
27  * ZigzagIterator i = new ZigzagIterator(v1, v2);
28  * while (i.hasNext()) v[f()] = i.next();
29  */

 

posted @ 2015-10-22 08:26  树獭君  阅读(155)  评论(0编辑  收藏  举报