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已经做到了这一点。您的问题没有阐明在
添加中返回布尔值的目的,因此我相信这个问题无法回答,除非您提供更多详细信息
按照JavaCollection
接口的约定,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;
}