Я не понимаю, почему удаление в конце одного связанного списка идет в O (1) раз, как говорит wikipedia article.Почему удаление в одном связанном списке O (1)?
Один связанный список состоит из узлов. Узел содержит какие-то данные и ссылку на следующий узел. Ссылка на последний узел в связанном списке равна NULL.
-------------- -------------- --------------
| data | ref | -> | data | ref | -> ... -> | data | ref |
-------------- -------------- --------------
Я действительно могу удалить последний узел в O (1). Но в этом случае вы не устанавливаете ссылку на новый последний, предыдущий, на null, поскольку он все еще содержит ссылку на удаленный последний узел. Поэтому мне было интересно, не игнорируют ли они это в анализе времени выполнения? Или вам нужно, чтобы вам не приходилось менять это, поскольку ссылка, ну, просто указывает на ничего, и такое считается нулевым?
Потому что, если это не будет пренебрегать, я бы сказал, что удаление O (n). Так как вам нужно перебирать весь список, чтобы перейти к новому последнему узлу и установить его ссылку также на null. Только в двойном связанном списке было бы действительно O (1).
-edit- Возможно, эта точка зрения дает еще несколько разъяснений. Но я вижу «удаление узла» как успешное удаление самого узла и установление предыдущей ссылки на нуль.
Я вижу две ссылки на O (1) в этой статье в Википедии, но ни одна из них не заявляет, что удаление последнего узла в односвязном списке является операцией O (1). Предположительно, вы уже удерживаете указатель на предыдущий узел при попытке удаления, требуемый для удаления любого узла, кроме первого. –