Получить и установить

Привет, мир, в этом сообщении блога я продолжу разбирать структуру данных односвязного списка, в частности, методы get и set. Если вы не знаете, что такое связанный список или что я имею в виду, когда говорю, что мы собираемся искать новые методы для связанного списка, не стесняйтесь вернуться и прочитать некоторые из моих предыдущих блогов.
Часть первая: Односвязные списки и метод push
Часть вторая: Односвязные списки и метод Pop
Часть третья: Односвязные списки и метод Shift и Unshift

Что такое получить?

Get — это метод, который возвращает элемент из заданной позиции внутри связанного списка. Итак, если бы у нас был список из 10 элементов, и мы хотели бы получить третий элемент, мы бы написали этот метод для этого. Это работает аналогично получению элементов в массиве, поскольку мы начинаем с 0-й позиции с вводом 0, а затем получаем и возвращаем первый элемент или заголовок нашего связанного списка. И в этом примере мы будем использовать 9 в качестве входных данных, чтобы получить/вернуть 10-й/последний элемент/хвост в нашем списке. Чтобы получить любой элемент, нам нужно перебирать список, нажимая .next в каждом из узлов, пока мы не доберемся до пронумерованной позиции; исключение составляет случай 0, в котором нет необходимости нажимать .next. Таким образом, в отличие от массива, в котором есть встроенный индекс, нам нужно вручную подсчитывать желаемый элемент, который мы получаем.

Написание метода get

При написании метода get функция принимает число в качестве аргумента для представления индекса. В нашем пограничном случае, если индекс меньше 0 или больше или равен длине списка, мы вернем null. Затем мы создадим цикл, который будет проходить по списку, пока не достигнет индекса, а затем вернет узел с этим индексом. Чтобы отслеживать наш обход, мы создадим переменную-счетчик, которая будет начинаться с нуля и будет увеличиваться каждый раз, когда мы попадаем в .next внутри каждого узла.

get(index){
    if(index < 0 || index >= this.length) return null
    let counter = 0
    let current = this.head
    while(counter !== index){ 
      counter = current.next;
      current ++
    }
    return current
}

Что такое сет?

Set похож на get тем, что мы будем проходить по связанному списку с заданным индексом, однако вот чем он отличается. Метод set принимает два аргумента: (1) индекс, который мы хотим изменить, и (2) новое значение, которое мы вставим и заменим этим индексом. Итак, допустим, у нас есть очень простой связанный список, в котором записаны значения от 1 до 5. 1 будет в индексе 0, а значение 5 будет в индексе 4. И допустим, мы хотим заменить элемент в индексе 2 словом вроде «привет». Наш начальный список будет выглядеть так:
1 => 2 => 3 => 4 => 5
и метод set будет выглядеть так:
set(2, «hello»)
и это вернет список, который выглядит следующим образом:
1 =› 2 =› «hello» =› 4 =› 5

Запись метода set

При написании метода set функция будет принимать индекс и значение. Далее мы будем использовать существующий метод get, чтобы найти конкретный узел. Пограничным случаем для этого является то, что если мы не находим узел, мы возвращаем false, то есть мы не можем изменить значение несуществующего индекса. Это предотвратит нарушение нашего кода, если кто-то случайно или намеренно введет число, которое больше длины нашего списка или меньше 0. Если узел найден, мы обновим значение узла, чтобы оно равнялось переданному значению из метод set и вернуть true.

set(index, value){
    let foundNode = this.get(index)
    if(foundNode){
       foundNode.value = value;
       return true 
    }
    return false
}

Ниже приведен полный код со всем, что мы разработали до этого момента: