-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ステートメントで新しいノードの挿入ポイントを見つけ、新しいノードの次のポイントを残りのポイントに設定します。リストですが、実際には新しいノードをリストに入れているわけではありません。

于 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 に答える