描述:
给你一个嵌套的列表,实现一个迭代器将其摊平。
一个列表的每个元素可能是整数或者一个列表。
样例:
给出列表 [[1,1],2,[1,1]]
,经过迭代器之后返回 [1,1,2,1,1]
。
给出列表 [1,[4,[6]]]
,经过迭代器之后返回 [1,4,6]
。
思路:
创建ArrayList来存储,首先将平面链表,然后存储在arraylist中,使用迭代器实现next()以及hasnext()
/**
* // This is the interface that allows for creating nested lists.
* // You should not implement it, or speculate about its implementation
* public interface NestedInteger {
*
* // @return true if this NestedInteger holds a single integer,
* // rather than a nested list.
* public boolean isInteger();
*
* // @return the single integer that this NestedInteger holds,
* // if it holds a single integer
* // Return null if this NestedInteger holds a nested list
* public Integer getInteger();
*
* // @return the nested list that this NestedInteger holds,
* // if it holds a nested list
* // Return null if this NestedInteger holds a single integer
* public List<NestedInteger> getList();
* }
*/
import java.util.Iterator;
public class NestedIterator implements Iterator<Integer>{
ArrayList<Integer> result = new ArrayList<Integer>();
public NestedIterator(List<NestedInteger> nestedList) {
// Initialize your data structure here.
search(nestedList , result);
}
public void search(List<NestedInteger> nestedList , ArrayList<Integer> result){
for(NestedInteger list : nestedList){
if(list.isInteger()){
result.add(list.getInteger());
}else{
search(list.getList() , result);
}
}
}
// @return {int} the next element in the iteration
@Override
public Integer next() {
// Write your code here
Iterator it = result.iterator();
int m = (int)it.next();
result.remove(0);
return m;
}
// @return {boolean} true if the iteration has more element or false
@Override
public boolean hasNext() {
// Write your code here
Iterator it = result.iterator();
return it.hasNext();
}
@Override
public void remove() {}
}
/**
* Your NestedIterator object will be instantiated and called as such:
* NestedIterator i = new NestedIterator(nestedList);
* while (i.hasNext()) v.add(i.next());
*/