-3
public void addNode(Car newCarEntry){
    ListNode currentNode;
    ListNode newNode = new ListNode(newCarEntry);

    if (head == null || newCarEntry.isNewerThan(head.carItem)){
        newNode.next = head;
        head = newNode;
    }else{
        currentNode = head.next;
        while(currentNode != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
            currentNode = currentNode.next;
        }
        currentNode.next = newNode.next;
        currentNode = newNode;
    }
    numberOfNodes++;
}
4

2 回答 2

0

这看起来很像家庭作业,所以我不会在这里放任何代码,但是在你的 else 语句中,你正在寻找新节点的插入点,并将新节点的 next 设置为指向列表,但您实际上并没有在任何时候将新节点放入列表中。

于 2011-07-11T18:23:54.810 回答
0

假设您有一个单节点列表[HEAD]->null。现在将执行以下行:

currentNode = head.next; // => null
while(currentNode.next != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
    ...
}

currentNode.next因此,当您尝试添加第二个节点时,它会给您一个空指针异常(访问)。

编辑后:现在不会再出现空指针异常。相反,会发生以下情况:

currentNode = head.next;              // => null
while(currentNode != null && ...) {   // => not entering loop
    ...
}
newNode.next = currentNode;           // => i.e. null
newNode = currentNode;                // => i.e. null

您只是在更改局部变量newNode,而不是列表或头部。

于 2011-07-11T18:24:13.757 回答