#pointers #data-structures #linked-list
#указатели #структуры данных #связанный список
Вопрос:
В чем разница между обходом списка ссылок до temp!=NULL
(использование временной переменной для обхода списка) и temp->next!=NULL
?
while(temp!=NULL)
{
cout<<temp->data;
temp=temp->next;
}
while(temp->next!=NULL)
{
cout<<tmep->data;
temp=temp->next;
}
Ответ №1:
Разница в том, что сначала будут напечатаны все данные узла в связанном списке. Но второй будет печатать все данные узла, кроме последнего. Поскольку следующий указатель последнего узла будет указывать на null , таким образом, условие внутри цикла while будет false и не будет выполняться для последнего узла.
Комментарии:
1. Голам рахман это было то, что я хотел знать … спасибо..
Ответ №2:
Основной ответ, который я бы дал, заключается в том, что вышеупомянутые алгоритмы можно одинаково использовать для обхода связанного списка. Вот в чем разница.
Первый алгоритм: указатель перемещается первым. Затем он проверяет текущий узел. Если оно не равно нулю, оно выводит значение и переводит указатели на следующий узел. После завершения обхода указатель указывает на нулевое значение.
Второй алгоритм: указатель проверяет следующий узел. Если он не равен нулю, он перемещает указатели на него и выводит значение. После завершения обхода указатель указывает на последний узел.
Ответ №3:
При использовании второго подхода, пожалуйста, убедитесь, что переменная temp не равна NULL перед запуском цикла while. Если в вашем списке нет элемента, вы получите исключение при попытке доступа temp->next
к первой строке цикла while.
С другой стороны, первый подход не вызывает эту ошибку, даже если переменная temp имеет значение NULL.