返回Java中已删除的节点RECURSIVELY

时间:2019-01-13 10:50:39

标签: java recursion linked-list

我使用C ++学习了大多数链接数据结构,其中可以通过引用进行传递,并且递归非常简单。我最近改用Java,并且总是对这些结构的递归版本感到困惑。

我想从列表中删除该节点。但是我想返回该节点。当我从else if分支返回已删除的节点时,它可能会使列表混乱。但是我看不到解决方法。

public node deleteval (int val){

        node prev = head;

        head = deleteval(head,prev,val);

        return head;
    }

 private node deleteval(node head,node prev, int val){

        if(head == null){

            return null;
        }
        else if (head.value == val){

            prev.next = head.next;
            node deleted = head;
            head = prev;


            return head.next;
        }

        prev = head;
        head.next = deleteval(head.next,prev,val);

        return head;
    }

这不是一项作业,只是试图理解。感谢您的输入。

1 个答案:

答案 0 :(得分:1)

要删除节点,您只需要做prev.next = head.next并处理root节点的边缘情况。不需要堆栈或任何其他支持的数据结构,您只需将其递归到列表深处,直到找到该值或到达末尾为止。

private Node root;

public Node deleteVal(int val) {
  return deleteRec(root, null, val);
}

private Node deleteRec(Node head, Node prev, int val) {
  if (head == null) {
    return null;
  } 
  if (head.value == val) {
    if (prev != null) { 
      prev.next = head.next; // deleting non-root node
    } else { 
      root = null; // deleting root node  
    }
    return head;
  }
  return deleteRec(head.next, head, val);
}