Каков эффективный способ обхода списка?

#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.