英文:
RecursiveLinkedCollections add methods
问题
以下是翻译好的代码部分:
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);
}
在代码的 return recAdd(front, data);
行中,您遇到了类型错误,因为 recAdd
方法返回的是 LLNode<T>
类型而不是 boolean
类型。您的 add
方法的签名要求返回一个 boolean
值,以指示添加是否成功。
要解决这个问题,您可以修改 recAdd
方法,使其返回一个 boolean
值,以反映添加操作是否成功。这是修改后的代码:
private boolean recAdd(LLNode<T> node, T data) {
if (node.getLink() == null) {
node.setLink(new LLNode<T>(data));
return true; // Return true to indicate successful addition
}
return recAdd(node.getLink(), data);
}
@Override
public boolean add(T data) {
return recAdd(front, data);
}
这样,recAdd
方法现在返回一个布尔值,指示是否成功添加节点,而 add
方法将这个布尔值传递给调用者,以满足接口要求。
英文:
for one of my homework problems we are supposed to recursively add a node to a linked list. here is my code:
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);
}
As you can see, I am supposed to call the recAdd method from the add function, but there is an error on the
return recAdd(front, data);
line, as I can not convert LLNode<T> to boolean. Are there any suggestions? for the recAdd method, I am supposed to return a node, but I can not find a way to work around this. Also, here is a descirption of what the add method does in the 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);
答案1
得分: 1
你可以始终在add
操作中返回true
,如下所示:
@Override
public boolean add(T data) {
recAdd(front, data);
return true;
}
正如你可以在LinkedList
实现和ArrayList
实现中看到的那样,Java已经这样做了。
英文:
You could always return true
in the add
operation, like
@Override
public boolean add(T data) {
recAdd(front, data);
return true;
}
As you can see in the LinkedList
implementation and the ArrayList
implementation, Java already does that.
答案2
得分: 0
你的问题没有明确说明在 add
方法中返回 boolean
的目的是什么,所以我认为除非你提供更多细节,否则无法回答这个问题。
根据 Java Collection
接口的约定,Collection
和 List
应该在 add
方法中返回 boolean
。然而,由于你的代码没有处理 false
的情况,为什么不像 Java 中的原生实现一样返回 void
或始终返回 true
呢?
如果你仍然想要返回 boolean
值,在你的代码片段的基础上有一些解决方法,比如创建一个表示 add
状态的字段标志,或者将要添加的对象与尾部进行比较。请注意,这些方法可能会依赖于预设条件(例如:无重复值等)。
英文:
Your question doesn't clarify what the purpose of returning boolean
in add
is, so I believe this question can't be answered unless you give us more detail.
As per the convention of Java Collection
interface, Collection
and List
should return boolean
in add method. However, since your code doesn't handle false
cases, why don't you return void or always true
like native implementation in Java?
In case you still want to return boolean
value, based or your code snippet, there are some work around like creating a field-flag indicating add status of add
, or comparing the tail with the object you want to add. Note that these may not work depended on pre-condition (i.e: no duplicated values, etc).
答案3
得分: 0
必须是
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;
}
英文:
Must be
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;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论