Рубрики
Без рубрики

Полное руководство по связанным спискам в JavaScript

Связанный список – это последовательная структура, которая состоит из последовательности элементов в линейном порядке, которые … помеченный WebDev, JavaScript, Codenewbie, Codequality.

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

class Node { 
    constructor(element) 
    { 
        this.element = element; 
        this.next = null
    } 
} 

Здесь был создан узел с использованием конструктора, который хранит два параметра:

  • элемент : ценность
  • Следующий : расположение до следующего узла

Местоположение к следующему узлу хранится как нулевое значение в начале.

Теперь давайте реализуем в классе LinkedList

// LinkedList class 
class LinkedList { 
    constructor() 
    { 
        this.head = null; 
        this.size = 0; 
    } 

    // Main Functions
    // add(element) 
    // insertAt(element, location) 
    // removeFrom(location) 
    // removeElement(element) 

    // Helper Functions 
    // indexOf(element)
    // isEmpty()
    // sizeOfList() 
    // printList()
} 

Приведенная выше программа отображает конструктор и Список методов, которые будут реализованы . Класс состоит из двух собственности:

  • голова : хранит первый узел списка
  • размер : хранит размер списка

Основные функции

добавить (элемент)

// adds an element at the end of list 
add(element) { 
    // creates a new node 
    var node = new Node(element); 

    // to store current node 
    var current; 

    // if list is Empty add the element and make it head 
    if (this.head == null) 
        this.head = node; 
    else { 
        current = this.head; 

        // iterate to the end of the list 
        while (current.next) { 
            current = current.next; 
        } 

        // add node 
        current.next = node; 
    } 
    this.size++; 
} 

Наш подход здесь первый Если список пуст, мы добавляем элемент в начало , еще Мы постоянно толкаем элемент в следующем узле и добавляем элемент в конце Анкет текущий используется для итерации через список после каждой итерации, которую мы обновляем, чтобы быть Следующий текущего узла. Если затем NULL (последний элемент списка содержит NULL в следующем), то мы добавляем элемент в список.

Вставка (элемент, индекс)

// insert element at the position 'index' of the list 
insertAt(element, index) { 
    if (index > 0 && index > this.size) 
        return false; 
    else { 
        // creates a new node 
        var node = new Node(element); 
        var current, previous; 

        current = this.head; 

        // add the element to the first index 
        if (index == 0) { 
            node.next = this.head; 
            this.head = node; 
        } else { 
            current = this.head; 
            var it = 0; 

            // iterate over the list to find the position to insert 
            while (it < index) { 
                it++; 
                previous = current; 
                current = current.next; 
            } 

            // adding an element 
            node.next = current; 
            previous.next = node; 
        } 
        this.size++; 
    } 
} 

Наш подход здесь Если индекс равен нулю, мы добавляем элемент в передней части списка и сделаем его головой , Если индекс является последней позицией списка, мы добавляем элемент в конце списка еще, Если индекс находится между 0 или размером – 1 мы перечислим индексу и добавляем элемент в этом индексе

Предыдущий содержит предыдущий узел текущего

удалить от (индекс)

// removes an element from the 'index'th location 
removeFrom(index) { 
    if (index > 0 && index > this.size) 
        return -1; 
    else { 
        var current, previous, it = 0; 
        current = this.head; 
        previous = current; 

        // deleting first element 
        if (index == 0) { 
            this.head = current.next; 
        } else { 
            // iterate over the list to the position to remove an element 
            while (it < index) { 
                it++; 
                previous = current; 
                current = current.next; 
            } 

            // remove the element 
            previous.next = current.next; 
        } 
        this.size--; 

        // return the remove element 
        return current.element; 
    } 
} 

Наш подход здесь Если индекс равен 0, то мы снимаем головку и делаем следующий узел головки списка , Если индекс равен размеру – 1, то мы удалим последний элемент из списка и делаем предыдущий последний элемент , наконец, Если он находится между 0 до размера – 1 мы удаляем элемент, используя предыдущий и текущий узел Анкет

удалить элемент (элемент)

// removes a given element from the list 
removeElement(element) { 
    var current = this.head; 
    var previous = null; 

    // iterate over the list 
    while (current != null) { 
        // comparing element with current element 
        // if found 
            // then remove the element 
            // and return true 
        if (current.element == = element) { 
            if (previous == null) { 
                this.head = current.next; 
            } else { 
                previous.next = current.next; 
            } 
            this.size--; 
            return current.element; 
        } 
        previous = current; 
        current = current.next; 
    } 
    return -1; 
} 

Эта функция почти такая же, как удалить от (индекс) Просто здесь мы ищем элемент и удаляем его.

Вспомогательные функции

Индекс (элемент)

// finds the index of element 
indexOf(element) { 
    var count = 0; 
    var current = this.head; 

    // iterae over the list 
    while (current != null) { 
        // compare each element of the list with given element 
        if (current.element == element) 
            return count; 
        count++; 
        current = current.next; 
    } 

    // not found 
    return -1; 
} 

В этом методе мы перечитываем список, чтобы найти индекс элемента. Если его нет в списке, он возвращает -1 вместо этого.

пусто()

// checks the list for empty 
isEmpty() { 
    return this.size == 0; 
} 

В этом методе мы проверяем на получение размер Собственность LinkedList класс, и если это ноль тогда список пуст.

sizeoflist ()

// gives the size of the list 
sizeOfList() { 
    console.log(this.size); 
} 

Просто отображает размер Собственность LinkedList класс.

printlist ()

// prints the list items 
printList() { 
    var current = this.head; 
    var str = ""; 
    while (current) { 
        str += current.element + " "; 
        curr = current.next; 
    } 
    console.log(str); 
} 

В этом методе мы перечитываем весь список, объединяем элементы каждого узла и печатаем его.

Реализация

Теперь мы будем использовать разные функции из вышеизложенного.

// creating an object for the Linkedlist class 
var list = new LinkedList(); 

// testing isEmpty on an empty list
console.log(list.isEmpty()); 
// returns true 

// adding element to the list 
list.add(10); 

list.printList(); 
// prints 10 

console.log(list.sizeOfList()); 
// returns 1 

// adding more elements to the list 
list.add(20); 
list.add(30); 
list.add(40); 
list.add(50); 

list.printList(); 
// returns 10 20 30 40 50 

// prints 50 from the list 
list.removeElement(50); 

list.printList(); 
// prints 10 20 30 40 

console.log("Index of 40 " + list.indexOf(40)); 
// returns 3 

list.insertAt(60, 2); 
// insert 60 at second position 

list.printList(); 
// list contains 10 20 60 30 40 

console.log("Is List Empty ? " + list.isEmpty()); 
// returns false

console.log(list.removeFrom(3)); 
// remove 3rd element from the list 

list.printList(); 
// prints 10 20 60 40 

Подтверждение

Если я допустил какую -либо ошибку в статье, пожалуйста, прокомментируйте это.

Оригинал: “https://dev.to/ishanbagchi/complete-guide-to-linked-lists-in-javascript-2ikd”