列表不为空,但poll方法返回null

时间:2018-10-25 14:06:50

标签: java tree queue

我的方法应该计算集合nodes中节点的深度,但是对于某些树,会调用NullPointerException,这是因为queue.poll()返回null。在方法描述中,据说queue.poll()仅当队列为空时返回null。在while循环中检查了这种情况,所以我的问题是,为什么会发生此错误以及如何解决该问题。

private Map<Tree, Integer> determineDepth(Tree root, Set<Tree> nodes) {
    Map<Tree, Integer> depthMap = new HashMap<>();
    Map<Tree, Boolean> visited = new HashMap<>();
    LinkedList<Tree> queue = new LinkedList<Tree>();

    depthMap.put(root, 0);
    visited.put(root, true);
    queue.add(root);
    Tree node;
    while (queue.size() != 0) {
        node = queue.poll();
        int depth = depthMap.get(node);
        for (Tree child : node.children()) {
            depthMap.put(child, depth + 1);
            visited.putIfAbsent(child, false);
            if (!visited.get(child)) {
                visited.put(child, true);
                queue.add(child);
            }
        }
    }
    return depthMap;
}

1 个答案:

答案 0 :(得分:3)

如果将override func willMove(toParentViewController parent: UIViewController?) { var textAttributes: [NSAttributedString.Key : Any]? if parent == nil{ // navigating back textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.black] }else{ textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white] } navigationController?.navigationBar.titleTextAttributes = textAttributes } 添加到LinkedList,它将被保留。例如

null