首页 > 解决方案 > 添加到链表的方法无法正常工作

问题描述

我正在编写一个代码来在二叉树中搜索并添加当前节点的正确节点,一切都很完美,因为它打印了消息,所以它证明它可以工作,但我不知道为什么它没有将元素添加到尽管它实际上工作正常,但该列表。我正在递归地工作,但我没有找到错误。println 不是很重要,仅用于验证。

public List<E> equiposEliminados(E seleccion){
    return equiposEliminados(seleccion, root);
}

private List<E> equiposEliminados(E seleccion, Node<E> n){
    List<E> listaEquipos = new LinkedList<>();
    System.out.println("Nodo actual: "+n.data);
    if(n.right != null && n.data.equals(seleccion)){
        System.out.println("Nodo n (dentro del if): "+n.data);
        System.out.println("Nodo derecho de n (dentro del if): "+n.right.data);
        listaEquipos.add(n.right.data);
    }
    if(n.left != null && n.left.data.equals(seleccion)){
        n = n.left;
        System.out.println("Proximo nodo(nodo izquierdo del actual): "+n.data);
        return equiposEliminados(seleccion, n);
    }
    else if(n.right != null && n.right.data.equals(seleccion)){
        n = n.right;
        System.out.println("Proximo nodo(nodo derecho del actual): "+n.data);
        return equiposEliminados(seleccion, n);
    }
    return listaEquipos;
}

标签: javarecursion

解决方案


这是因为List<E> listaEquipos = new LinkedList<>();是递归函数的一部分equiposEliminados(E seleccion, Node<E> n),所以每次都会被清除。在递归函数之外初始化列表。

是的,您可以将 listaEquipos 作为另一个参数传递给equiposEliminados(E seleccion, Node<E> n).

List<E> listaEquipos = new LinkedList<>()然后初始化

public List<E> equiposEliminados(E seleccion){

在 return 语句中调用递归函数之前。

像下面这样

public List<E> equiposEliminados(E seleccion){
    List<E> listaEquipos = new LinkedList<>();
    return equiposEliminados(seleccion, root, listaEquipos);
}


private List<E> equiposEliminados(E seleccion, Node<E> n, List<E> listaEquipos){

    System.out.println("Nodo actual: "+n.data);

希望这可以帮助


推荐阅读