我正在尝试为任务创建一个自定义数据结构,最类似于列表。 我已经制作了Node类:
class Node {
int data;
Node nextNode = null;
public Node(int data) {
this.data=data;
}
}
和类DataStructure:
public class DataStructure {
private Node previousNode;
private Node StartingNode;
private boolean isEmpty = true;
public void AddNode(int data) {
if(isEmpty) {
isEmpty = false;
StartingNode = new Node(data);
previousNode = StartingNode;
}
else {
previousNode.nextNode = new Node(data);
previousNode = previousNode.nextNode;
}
}
private boolean isFirst = true;
int max = 0;
public int getMaxData(Node d) {
if(isFirst) {
isFirst = false;
max = d.data;
}
else {
if(d.data > max)
max = d.data;
if(d.nextNode != null)
getMaxData(d.nextNode);
}
return max;
}
}
当我尝试运行上述示例时,无法正确创建列表(据我所知)。我一直在想,这可能与垃圾回收有关,但是我相信节点对象仍然有效,因为它们由nextNode变量引用。
这是运行示例的主要方法:
public static void main(String [] args) {
DataStructure list = new DataStructure();
list.AddNode(5);
list.AddNode(15);
list.AddNode(12);
list.AddNode(3);
System.out.println(list.getMaxData(list.StartingNode));
}
预期结果是要打印的数字15,但我只有第一个节点(5)。 我尝试通过在getMaxData()的开头添加System.out.writeln(d.data)来进行“调试”,但只打印了5个,因此我相信不会创建其他节点。
答案 0 :(得分:1)
这个问题是这样的:
if(isFirst) {
isFirst = false;
max = d.data;
} else {...}
如果总是在第一个元素上使用if,则只需返回该值即可。您可以使用else子句来做到这一点:
public int getMaxData(Node d) {
if (d.data > max)
max = d.data;
if (d.nextNode != null)
return getMaxData(d.nextNode);
return max;
}