LinkedList temp.next и temp? - PullRequest
       0

LinkedList temp.next и temp?

1 голос
/ 09 декабря 2011

Итак, я практиковал некоторые проблемы со связным списком, и я все время путаюсь с, скажем, мы // это только один связанный список заголовков

// what is the difference between 

ListNode temp = head;
while( temp != null ) {
    temp = temp.next ; 
} 

while( temp.next != null ) {
    temp = temp.next ; 
} 

опять же, в чем разница между этими двумя? Если вы можете объяснить мне это, я был бы очень признателен.

Ответы [ 4 ]

2 голосов
/ 09 декабря 2011

Первый пример завершается, когда temp == null, что означает, что temp будет иметь значение null после цикла и будет бесполезно для вас, хотя для обработки элементов в списке это совершенно правильный подход.

Второй пример остановится, когда temp.next == null, но сам temp на самом деле имеет значение, в этом случае это будет ссылка на конец списка, что гораздо полезнее, если вы хотите добавить что-то еще к список также.

Как указали некоторые другие, второе вызовет исключение нулевой разыменования, если temp равно null, но это будет проблемой только в том случае, если temp был нулевым до обработки цикла, поэтому это можно предотвратить с помощью условного выражения.

1 голос
/ 09 декабря 2011

первая остановит одну ссылку позже второй, поэтому, если вы хотите обработать каждый узел, используйте первый.

0 голосов
/ 09 декабря 2011

Второй цикл будет генерировать исключение nullPointerException при выполнении условия, поэтому это не эффективный способ.

0 голосов
/ 09 декабря 2011

Второй может получить NullPointerException, если temp сам по себе равен нулю при проверке условия while в первый раз. Первый безопасен от такого исключения.

Второй будет в конечном итоге в последнем элементе в связанном списке, в то время как первый будет иметь нулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...