Java中链接列表头引用分配到链接列表对象

Java中链接列表头引用分配到链接列表对象,java,object,linked-list,abstract-data-type,Java,Object,Linked List,Abstract Data Type,以下拆分器方法用于返回两个独立链表的IntLinkedBag数组。它通过调用ListSplitlessCreater方法来实现这一点,并传递一个整数链表的head引用和一个splitter整数值,该整数值返回一个IntNode数组,该数组包含已排序的两个新整数链表的head引用。拆分器方法的工作方式与编写的相同。这是我让它工作的唯一方法。但我知道必须有一种更简单/更好的编码方法。在//******之间的所有内容,我想用这个替换 newLists[0].head = answer[0]; new

以下拆分器方法用于返回两个独立链表的IntLinkedBag数组。它通过调用ListSplitlessCreater方法来实现这一点,并传递一个整数链表的head引用和一个splitter整数值,该整数值返回一个IntNode数组,该数组包含已排序的两个新整数链表的head引用。拆分器方法的工作方式与编写的相同。这是我让它工作的唯一方法。但我知道必须有一种更简单/更好的编码方法。在//******之间的所有内容,我想用这个替换

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

新列表[0]
新列表[1]
中没有实际初始化的内容;数组在创建时创建默认值
null

试着这样做:

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

没有循环也可以做同样的事情。

新列表[0]
新列表[1]
中实际上没有初始化任何内容;数组在创建时创建默认值
null

试着这样做:

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

没有循环也能做同样的事情。

我做了如上所述的事情。还有什么想法吗?@user1371651:至于你的编辑,我在这个问题上无法回答(你只是在寻找更好的编码方法)。您必须创建新头或调用
add(int)
的原因完全取决于您实现
IntLinkedBag
类的方式。除非您先调用
add(int)
,否则它不会返回任何内容。同样,如果不查看它的实现,我无法回答具体的原因(此时可能会有点太多)。正如您所看到的那样。还有什么想法吗?@user1371651:至于你的编辑,我在这个问题上无法回答(你只是在寻找更好的编码方法)。您必须创建新头或调用
add(int)
的原因完全取决于您实现
IntLinkedBag
类的方式。除非您先调用
add(int)
,否则它不会返回任何内容,这也是我无法回答的原因,因为我没有看到它的实现(此时会有点太多)。