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”