java - Java中链表头引用分配给链表对象

标签 java object linked-list abstract-data-type

以下 splitter 方法旨在返回两个单独链表的 IntLinkedBag 数组。它通过调用 listSplitLessGreater 方法并传递整数链表的头引用和分割器整数值来完成此操作,该值返回一个 IntNode 数组,该数组包含两个已排序的新整数链表的头引用。 splitter 方法按书面方式工作。这是我让它发挥作用的唯一方法。但我知道必须有一种更简单/更好的编码方法。//******** 之间的所有内容我想用这个替换

newLists[0].head = answer[0]; 
newLists[1].head = answer[1];

但是当我这样做时,我在运行程序时收到空指针豁免错误。我的问题是为什么?以及如何编写这段代码的正确方法?

 public IntLinkedBag[] splitter(int target)
{
    IntLinkedBag[] newLists = new IntLinkedBag[2]; 
    IntNode[] answer = new IntNode[2];
    answer = IntNode.listSplitLessGreater(head, target);

    //**********************************
    IntLinkedBag b = new IntLinkedBag();
    IntLinkedBag c = new IntLinkedBag();
    b.add(5);
    b.head = answer[0];
    newLists[0] = b;
    c.add(5);
    c.head = answer[1];
    newLists[1] = c;
    //**********************************

    return newLists;
}

我更新了我的代码,如下所示。我没有收到任何错误,但它现在没有返回任何内容。即使测试代码打印链接列表......和想法?

  public IntLinkedBag[] splitter(int target)
{
    IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()}; 

    IntNode[] answer = new IntNode[2];
    answer = IntNode.listSplitLessGreater(head, target);


        newLists[0].head = answer[0]; 
    newLists[1].head = answer[1];



    System.out.println(IntNode.showList(newLists[0].head)); //test code
    System.out.println(IntNode.showList(newLists[1].head)); //test code

    return newLists;
}

添加此代码可以使其正常工作,但为什么需要这样做?

newLists[0].add(5); //adding a number to linked list to create a temporary head.
newLists[1].add(5); //don't know why I have to have this but its only way code works correctly

最佳答案

newlists[0] 或 newlists[1] 内部没有实际初始化任何内容;该数组在创建时创建默认值 null

尝试这样的事情:

IntLinkedBag[] newLists = new IntLinkedBag[2];
for(int i = 0; i < newLists.length; i++) {
    newLists[i] = new IntLinkedBag();
}

更紧凑,你可以这样做:

IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()};

这在没有循环的情况下完成了同样的事情。

关于java - Java中链表头引用分配给链表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491976/

相关文章:

Java多线程执行超出循环范围

javascript - JavaScript 对象的动态深度设置

Javascript:将数组数组转换为对象数组

c - 创建链表时出现段错误

c - 快速搜索双向链表

c - c中的链表,意外的结果

java - Outlook 电子邮件和 ICS 格式 — 奇怪的行为

java - 如何解决两个接口(interface)中方法名称冲突

java - JooQ Ant 代码生成不起作用

java - 为什么不能创建子类类型的父类的对象,但可以反向创建?