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++;
}
问问题
258 次
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 回答