Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归链接集合添加方法_Java - Fatal编程技术网

Java 递归链接集合添加方法

Java 递归链接集合添加方法,java,Java,对于我的一个家庭作业问题,我们应该递归地向链表中添加一个节点。这是我的密码: private LLNode<T> recAdd(LLNode<T> node, T data) { if(node.getLink() == null) { node.getLink().setLink(new LLNode<T>(data)); } return recAdd(node.getLink(), data); } @O

对于我的一个家庭作业问题,我们应该递归地向链表中添加一个节点。这是我的密码:

private LLNode<T> recAdd(LLNode<T> node, T data) {
    if(node.getLink() == null) {
        node.getLink().setLink(new LLNode<T>(data));
        }
    return recAdd(node.getLink(), data);
}

@Override
public boolean add(T data) {
    return recAdd(front, data);
}
行,因为我无法将LLNode转换为布尔值。有什么建议吗?对于recAdd方法,我应该返回一个节点,但我找不到解决这个问题的方法。此外,下面是add方法在CollectionInterface中的作用说明:

    /**
 * Attempts to add element to this collection.
 * @param element
 * @return Returns true if successful, false otherwise. 
 * Return false if element is null, otherwise true.
 */
boolean add(T data); 

您可以在
add
操作中始终返回
true
,如

@覆盖
公共布尔加法(T数据){
recAdd(前端,数据);
返回true;
}

正如您在和中所看到的,Java已经做到了这一点。

您的问题没有阐明在
添加中返回
布尔值的目的,因此我相信这个问题无法回答,除非您提供更多详细信息

按照Java
Collection
接口的约定,
Collection
List
应该在add方法中返回
boolean
。然而,既然您的代码不处理
false
情况,为什么不像Java中的本机实现那样返回void或总是
true

如果您仍然希望返回基于代码段或代码段的
布尔值,有一些解决方法,例如创建一个指示添加状态的字段标志,或者将尾部与要添加的对象进行比较。请注意,这些可能不起作用取决于前提条件(即:无重复值等)。

必须

private LLNode<T> recAdd(LLNode<T> node, T data) {
    if(node.getLink() == null) {
        LLNode<T> newNode = new LLNode<T>(data);
        node.setLink(newNode);
        return newNode;
    }
    return recAdd(node.getLink(), data);
}

@Override
public boolean add(T data) {
    recAdd(front, data);
    return true;
}
private LLNode recAdd(LLNode节点,T数据){
if(node.getLink()==null){
LLNode newNode=新的LLNode(数据);
setLink(newNode);
返回newNode;
}
返回recAdd(node.getLink(),data);
}
@凌驾
公共布尔加法(T数据){
recAdd(前端,数据);
返回true;
}

/***尝试将元素添加到此集合。*param元素*如果成功返回true,否则返回false。*如果元素为null,则返回false,否则返回true。*/布尔加法(T数据);这似乎是最有意义的,但当我运行它时,我不断得到一个空指针异常。。。有什么原因吗?当集合为空时,它不处理启动状态,因此在
节点处失败。getLink()
private LLNode<T> recAdd(LLNode<T> node, T data) {
    if(node.getLink() == null) {
        LLNode<T> newNode = new LLNode<T>(data);
        node.setLink(newNode);
        return newNode;
    }
    return recAdd(node.getLink(), data);
}

@Override
public boolean add(T data) {
    recAdd(front, data);
    return true;
}