NestedIterator-扁平化嵌套列表迭代器
发布日期:2021-05-18 07:53:22 浏览次数:20 分类:精选文章

本文共 1929 字,大约阅读时间需要 6 分钟。

NestedIterator设计了一个迭代器,使其能够遍历嵌套的整型列表,顺序展开所有整数。以下是代码实现及详细步骤说明:

代码实现:

import java.util.ArrayList;
import java.util.List;
public class NestedIterator implements Iterator
{
private List
list = new ArrayList<>();
public NestedIterator(List
nestedList) {
flatten(nestedList);
}
private void flatten(List
nestedList) {
for (int i = 0; i < nestedList.size(); i++) {
NestedInteger nestedInteger = nestedList.get(i);
if (!nestedInteger.isInteger()) {
List
subList = nestedInteger.getList();
flatten(subList);
} else {
list.add(nestedInteger.getInteger());
}
}
}
@Override
public Number next() {
if (list.isEmpty()) {
return null;
}
Number num = list.remove(0);
return num;
}
@Override
public boolean hasNext() {
return !list.isEmpty();
}
}

详细步骤说明:

  • 初始化迭代器:

    迭代器接受一个嵌套的整型列表nestedList。在构造时,它初始化一个辅助列表list,用于存储所有需要遍历的整数。

  • 线性化函数(flatten):

    这是一个递归函数,负责将嵌套的列表逐层展开。遍历输入列表中的每个元素:

    • 如果元素是整数,将其添加到list中。
    • 如果元素是一个列表,递归调用flatten函数,以继续处理子列表中的元素。
  • 迭代器方法(next):

    返回当前的整数并移除其元素于list中。当list为空时,返回null,指示已无更多元素。

  • 检查是否有下一个元素(hasNext):

    只需要检查list是否为空即可,返回true表示还有元素,false则表示无更多元素。

  • 代码解释:

    • nestedList:原始嵌套的整型列表,初始化时传入迭代器。
    • list:迭代器维护的辅助列表,将所有整数按顺序存储。
    • flatten方法通过递归或迭代的方式,将所有整数收集到list中。
    • next方法处理当前元素,并返回下一个数。当list为空时返回null。
    • hasNext方法简单地检查是否还有元素存在。

    使用示例:

    List
    nestedList = new ArrayList<>();
    nestedList.add(new NestedIntegerImpl([1, [2, [3]]], true));
    nestedList.add(new NestedIntegerImpl([4], true));
    NestedIterator iterator = new NestedIterator(nestedList);
    List
    result = new ArrayList<>();
    while (iterator.hasNext()) {
    result.add(iterator.next());
    }
    System.out.println(result); // [1, 2, 3, 4]

    这种设计保证了在处理嵌套结构时,能够按深度优先顺序正确遍历所有整数,适用于复杂的嵌套情况。

    上一篇:rotateRight-旋转链表
    下一篇:reverseBetween-反转链表

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月13日 22时55分39秒