Это линейная структура данных, представляющая набор узлов, где каждый узел указывает на следующий. Первый элемент в связанном списке — это голова, а последний — хвост.
Каждый узел структуры данных связанного списка должен иметь следующие свойства:
- значение:значение элемента
- next: адрес следующего узла (null, если его нет)
class Node { constructor(value) { this.value = value; this.next = null; } } class LinkedList { constructor() { this.head = null; this.size = 0; } }
Класс Linked List имеет два свойства:
- head: хранит первый узел списка
- размер:указывает количество узлов в списке.
Синтаксис:
Давайте посмотрим на синтаксис работы в структуре данных LinkedList:
1. add(value): вставляет узел в конец списка
class LinkedList { add(value) { let node = new Node(value); // If list is Empty add the element and make it head if(this.head === null) { this.head = node; } else { let current = this.head; // Iterates the list until reaching the last element // to adds the element. while(current.next) { current = current.next; } current.next = node; } this.size++; } }
2. удалить: удаляет узел в конце списка
class LinkedList { delete() { let size = this.size; let previous = null; let current = this.head; while(size-- > 0) { previous = current; current = current.next; } previous.next = null; this.size--; } }
3. insertAt(index, value): вставляет узел по указанному индексу.
class LinkedList { insertAt(index, value) { if(index < 0 || index > this.size) { return console.log("Enter valid index"); } let node = new Node(value); if(index === 0) { node.next = this.head; this.head = node; } else { let previous = null; let current = this.head; let start = 0; while(start++ < index) { previous = current; current = current.next; } node.next = current; previous.next = node; } this.size++; } }
4. removeFrom(index): удаляет узел в заданном индексе.
class LinkedList { removeFrom(index) { if(index < 0 || index >= this.size) { return console.log("Enter valid index"); } let previous = null; let current = this.head; let start = 0; while(start++ < index) { previous = current; current = current.next; } previous.next = current.next; this.size--; } }
5. indexOf(value): возвращает индекс заданного значения
class LinkedList { indexOf(value) { let current = this.head; let start = 0; while(start < this.size) { if(current.value === value) return start; current = current.next; start++; } return -1 || 'Value not found'; } }
6. isEmpty():Проверяет, пуст список или нет.
class LinkedList { isEmpty() { return this.size === 0; } }
7. sizeOfList(): возвращает размер списка
class LinkedList { sizeOfList() { return this.size; } }
Пример:
Теперь давайте воспользуемся классом LinkedList и его различными методами, описанными выше.
let list = new LinkedList(); list.isEmpty(); // true list.add(10); list.sizeOfList(); // 1 list.add(20); list.add(30); list.add(50); // 10, 20, 30, 50 list.insertAt(3, 40); // 10, 20, 30, 40, 50 list.delete(); // 10, 20, 30, 40 list.removeFrom(1); // 10, 30, 40 list.sizeOfList(); // 3 list.insertAt(5, 60); // Enter valid index list.indexOf(20); // -1 list.isEmpty(); // false list.indexOf(40); // 2
Спасибо за чтение! Я надеюсь, что вы нашли этот блог информативным и интересным. Если вы заметили какие-либо неточности или у вас есть какие-либо отзывы, пожалуйста, не стесняйтесь, дайте мне знать.