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++;
}
2 に答える
0
これは宿題によく似ているので、ここにコードを入れるつもりはありませんが、elseステートメントで新しいノードの挿入ポイントを見つけ、新しいノードの次のポイントを残りのポイントに設定します。リストですが、実際には新しいノードをリストに入れているわけではありません。
于 2011-07-11T18:23:54.810 に答える
0
1 ノードのリストがあるとします[HEAD]->null
。これで、次の行が実行されます。
currentNode = head.next; // => null
while(currentNode.next != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
...
}
currentNode.next
したがって、2 番目のノードを追加しようとすると、null ポインター例外 ( へのアクセス) が発生します。
編集後:ヌルポインタ例外は発生しなくなりました。代わりに、次のことが起こります。
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 に答える