非Arg构造函数Java

时间:2019-07-20 06:57:22

标签: java data-structures linked-list default-constructor

我在方法中调用构造函数以插入新节点。在添加新节点的同时,默认构造函数将使用默认值创建新节点。我只想使用插入方法插入值,如下面的代码所示。有什么办法可以避免将第一个节点设置为默认节点。

class Node {
    Node right, left;
    int data = 0;
    Node() {

    }
    Node(int data) {
        this.data = data;
    }
    public void insert(int value) {
        if (value <= data) {
            if (left == null) {
                left = new Node(value);
            } else {
                left.insert(value);
            }
        } else {
            if (right == null) {
                right = new Node(value);
            } else {
                right.insert(value);
            }
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Node new_node=new Node();//creating first node with 0 value
        new_node.insert(5);
        new_node.insert(4);
        new_node.insert(9);
        new_node.insert(23);
        new_node.insert(70);
        new_node.display();
    }
}

1 个答案:

答案 0 :(得分:3)

您可以将第一个值用作第一个元素:

Node new_node = new Node(5); // create 1st node with 1st value

或者您可以定义一个新的默认构造函数,使其具有一个您不希望出现在列表中的值(假设为-1),但是您必须注意列表中的这个元素< em>确实不是列表的一部分,这使得实现其他操作更加棘手:

Node() { data = -1; }

但是所有这些都是更大问题的征兆:您不应该在Node类中处理列表的开头。最好创建一个新类,将其命名为MyList并在其上定义一个Node head属性,所有插入/更新/删除/搜索操作都应在该类上实现。

保持头部分开很重要,因为有些操作会修改head。例如,您的insert()方法不考虑插入节点应位于现有列表开头的情况。