leetcode341. Flatten Nested List Iterator( 扁平化嵌套列表迭代器)

本文介绍如何使用Java实现一个NestedIterator类,用于遍历嵌套的整数列表并按顺序返回所有元素。通过递归和LinkedList优化存储,实现了hasNext()和next()方法以适应不断调用的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

You are given a nested list of integers nestedList. Each element is either an integer or a list whose elements may also be integers or other lists. Implement an iterator to flatten it.

Implement the NestedIterator class:

NestedIterator(List nestedList) Initializes the iterator with the nested list nestedList.
int next() Returns the next integer in the nested list.
boolean hasNext() Returns true if there are still some integers in the nested list and false otherwise.
Your code will be tested with the following pseudocode:

initialize iterator with nestedList
res = []
while iterator.hasNext()
append iterator.next() to the end of res
return res
If res matches the expected flattened list, then your code will be judged as correct.

Example 1:

Input: nestedList = [[1,1],2,[1,1]]
Output: [1,1,2,1,1]
Explanation: By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1].

有一个NestedInteger类型的List,这个NestedInteger元素可以是Integer,也可以是List,
相当于NestedInteger嵌套NestedInteger,List嵌套List。
要实现HasNext() 和 next(),
题目测试的时候在hasNext()时会不停的调用next(),得到nestedList中的所有元素。

思路:
在构造函数时把nestedList中的元素都保存到一个list中,
在next()时返回下一元素即可。

ArrayList在添加元素扩容时开销比较大,所以选择LinkedList。

添加元素时由于List中还有List,所以用递归。

另外,List中的元素类型NestedInteger是自定义类型,要用到代码中提示的方法,
比如说取出List中的Integer不是简单的list.get(i),而是list.get(i).getInteger()。

/**
 * // 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 empty list if this NestedInteger holds a single integer
 *     public List<NestedInteger> getList();
 * }
 */
public class NestedIterator implements Iterator<Integer> {
    LinkedList<Integer> list = new LinkedList<>();

    public NestedIterator(List<NestedInteger> nestedList) {
        addElement(nestedList);
    }

    @Override
    public Integer next() {
        return list.pollFirst();
    }

    @Override
    public boolean hasNext() {
        return list.size() > 0;
    }
    
    void addElement(List<NestedInteger> nestedList) {
        for(int i = 0; i < nestedList.size(); i ++) {
            if(nestedList.get(i).isInteger()) {
                list.add(nestedList.get(i).getInteger());             
            } else {
                addElement(nestedList.get(i).getList());
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值