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));
        }
    }
}

results matching ""

    No results matching ""