Flatten Nested List Iterator
給一個有嵌套的 list,要實作 hasNext()
, next()
介面
這題在考是否知道基礎的 stack 使用和想法,
hasNext()
作用是檢查是否有下一個元素,如果不為空就回傳 true
next()
是回傳下一個 integer,
因此要挑一個地方將嵌套的元素 "flatten"
我們在 hasNext() 做這件事,因為可以順便檢查嵌套的元素是不是空的
public class NestedIterator implements Iterator<Integer> {
private Stack<NestedInteger> stack;
public NestedIterator(List<NestedInteger> nestedList) {
stack = new Stack<>();
pushList(nestedList);
}
@Override
public Integer next() {
if (!hasNext()) {
return null;
}
return stack.pop().getInteger();
}
@Override
public boolean hasNext() {
while(!stack.isEmpty() && !(stack.peek().isInteger())) {
pushList(stack.pop().getList());
}
return !stack.isEmpty();
}
private void pushList(List<NestedInteger> nestedList) {
for (int i=nestedList.size()-1; i>=0; i--) {
stack.push(nestedList.get(i));
}
}
}