【问题标题】:Linked List head reference assignment to link list object in Java链接列表头引用分配给Java中的链接列表对象
【发布时间】:2012-05-08 02:57:43
【问题描述】:

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

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

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

  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

【问题讨论】:

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


    【解决方案1】:

    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()};
    

    没有循环也一样。

    【讨论】:

    • 我按照你上面看到的做了。还有什么想法吗?
    • @user1371651:至于您的编辑,我无法在这个特定问题中回答这个问题(您只是在寻找更好的编码方式)。您必须创建新头或调用 add(int) 的原因完全取决于您实现 IntLinkedBag 类的方式。除非您先调用 add(int),否则它不会返回任何内容,这也是我无法在没有看到其实现的情况下具体回答的原因(此时这有点太多了)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2014-03-15
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多