Для нашей последней установки серии связанных списков мы узнаем, как удалить узел из головы и хвоста связанного списка, а также написать функцию поиска для связанного списка. Итак, давайте приступим к делу.

Сначала мы удалим узел из головы связанного списка и получим его данные. Есть две ситуации, с которыми нам приходится иметь дело для этой функции. Ситуация, когда список пуст, и ситуация, когда список не пуст.

В строке 2 мы имеем дело с первым сценарием и говорим, что если связанный список не имеет головы, то он пуст, и мы возвращаем null.

Следующий сценарий состоит в том, что список не пуст, поэтому первое, что мы хотим сделать, это сохранить значение головного узла в переменной. Мы делаем это в строке 3.

Теперь, когда у нас сохранено значение заголовка, мы можем переподключить указатели и удалить узел заголовка. Итак, теперь мы скажем, что новая головка равна текущей вершине следующего узла, что мы и делаем в строке 4.

В строке 5 мы учитываем, что новый головной узел может иметь значение null, если мы начали с одного узла перед его удалением. Если присутствует голова, то перед ней или перед ней нет узла, поэтому мы устанавливаем для свойства предыдущего узла головы значение null. В строке 6 мы учитываем, что список пуст. Поэтому this.head уже имеет значение null, поэтому мы устанавливаем значение хвостового узла, this.tail равным нулю. И, наконец, мы возвращаем значение узла, который мы удалили из головы.

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

Последний метод, который мы добавим в наш связанный список, — это метод поиска.

Цель этого метода — получить некоторый фрагмент данных, который мы называем «searchValue» и который передается в качестве аргумента. Если «searchValue» отсутствует в нашем связанном списке, мы хотим вернуть null, а если оно есть в нашем списке, мы хотим вернуть это значение.

Первое, что мы хотим сделать, это создать переменную, которая будет хранить значение текущего узла. Поскольку нам нужно начать с какой-то точки списка, мы начнем с головы. Таким образом, значением текущего узла для запуска является this.head, что мы и делаем в строке 2 этой функции.

Далее мы будем использовать цикл while для перемещения по нашему списку от узла к узлу. Итак, хотя currentNode имеет значение true, мы хотим проверить значение этого узла. Если значение currentNode равно нашему searchValue, верните значение currentNode. В противном случае мы устанавливаем значение currentNode равным значению currentNode.next или, другими словами, следующему узлу в нашем списке. Как только мы достигнем конца нашего списка, мы получим значение null, потому что следующий узел от хвостового узла имеет значение null, которое оценивается слишком ложно. Поэтому, если currentNode имеет значение false, мы выйдем из цикла и вернем null.

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