创建自定义列表数据结构时可能出现逻辑错误

时间:2019-04-04 00:10:10

标签: java data-structures

我正在尝试为任务创建一个自定义数据结构,最类似于列表。 我已经制作了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个,因此我相信不会创建其他节点。

1 个答案:

答案 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;
}