Добавление узлов в список.На данный момент я не могу добавить второй узел. - PullRequest
0 голосов
/ 11 июля 2011
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 голосов
/ 11 июля 2011

Предположим, у вас есть список из одного узла [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, но не список или заголовок.

0 голосов
/ 11 июля 2011

Это очень похоже на домашнюю работу, поэтому я не собираюсь помещать здесь какой-либо код, но в своем выражении else вы находите точку вставки для нового узла и устанавливаете новый узел рядом с указателем на остальная часть списка, но вы фактически ни в коем случае не помещаете свой новый узел в список.

...