Design

341. Flatten Nested List Iterator

Stack的用法,list从后往前加入stack。
如果涉及到移除元素的话 stack方便
逻辑写在hasNext或者next都行
一开始习惯写在里next里,但是总需要判断empty的情况,不如写在hasNext()方便

public class NestedIterator implements Iterator {
    Stack stack = new Stack<>();
    public NestedIterator(List nestedList) {
        for(int i = nestedList.size() - 1; i >= 0; i--) {
            stack.push(nestedList.get(i));
        }
    }

    @Override
    public Integer next() {
        return stack.pop().getInteger();
    }

    @Override
    public boolean hasNext() {
        while(!stack.isEmpty()) {
            NestedInteger curr = stack.peek();
            if(curr.isInteger()) {
                return true;
            }
            stack.pop();
            for(int i = curr.getList().size() - 1; i >= 0; i--) {
                stack.push(curr.getList().get(i));
            }
        }
        return false;
    }
}

你可能感兴趣的:(Design)