Eine einfach verkettete Liste kann nur vom Anfang bis zum Ende oder vom Ende bis zum Anfang durchlaufen werden. Daher kann eine einfach verkettete Liste problemlos den nächsten Knoten erreichen, es ist jedoch schwierig, zum vorherigen Knoten zurückzukehren. Eine bidirektional verknüpfte Liste kann vom Anfang bis zum Ende und vom Ende bis zum Anfang durchlaufen werden. Die Verbindung der verknüpften Liste ist bidirektional. Ein Knoten hat sowohl vorwärts- als auch rückwärts verbundene Referenzen. Aus diesem Grund muss die doppelt verknüpfte Liste beim Einfügen oder Löschen eines Knotens die Referenzen von vier Knoten verarbeiten, und der belegte Speicherplatz ist auch größer. Implementierung einer doppelt verknüpften Liste JavaScript-Code zur Implementierung einer doppelt verketteten Liste //Erstelle eine doppelt verkettete Liste Konstruktorfunktion DoublyLinkedList() { //Erstelle eine Knotenkonstruktorfunktion Node(element) { dieses.element = element dies.nächstes = null this.prev = null // Neu hinzugefügt} // Definieren Sie die Eigenschaft this.length = 0 this.head = null this.tail = null // Neu hinzugefügt // Zugehörige Operationsmethoden definieren // Daten am Ende anhängen DoublyLinkedList.prototype.append = function (element) { // 1. Erstellen Sie einen Knoten basierend auf dem Element var newNode = new Node(element) // 2. Bestimmen Sie, ob die Liste eine leere Liste ist, wenn (this.head == null) { this.head = neuer Knoten this.tail = neuer Knoten } anders { this.tail.next = neuer Knoten neuerNode.prev = dieser.tail this.tail = neuer Knoten } // 3.Länge+1 diese.Länge++ } //Daten an beliebiger Position einfügen DoublyLinkedList.prototype.insert = function (position, element) { // 1. Bestimmen Sie das Problem außerhalb der Grenzen, wenn (Position < 0 || Position > this.length) false zurückgibt // 2. Einen neuen Knoten erstellen var newNode = new Node(element) // 3. Einfügeposition bestimmen if (position === 0) { // Daten an der ersten Position einfügen // Bestimmen, ob die verknüpfte Liste leer ist if (this.head == null) { this.head = neuer Knoten this.tail = neuer Knoten } anders { this.head.prev = neuer Knoten neuerNode.next = dieser.kopf this.head = neuer Knoten } } else if (position === this.length) { // Bis zum Ende einfügen // Überlegen: Müssen wir in diesem Fall prüfen, ob die verknüpfte Liste leer ist? Die Antwort lautet nein, warum? this.tail.next = neuer Knoten neuerNode.prev = dieser.tail this.tail = neuer Knoten } else { // Daten in der Mitte einfügen // Attribut definieren var index = 0 var aktuell = dieser.kopf var vorherige = null // Finde die richtige Position while (index++ < position) { vorherige = aktuelle aktuell = aktuell.nächstes } //Die Zeigerreihenfolge der Knoten austauschen newNode.next = current newNode.prev = vorherige current.prev = neuer Knoten vorheriger.nächster = neuer Knoten } // 4.Länge+1 diese.Länge++ returniere wahr } // Lösche das entsprechende Element entsprechend der Position DoublyLinkedList.prototype.removeAt = function (position) { // 1. Bestimmen Sie das Problem außerhalb der Grenzen, wenn (Position < 0 || Position >= this.length) null zurückgibt // 2. Bestimmen Sie den zu entfernenden Ort var current = this.head wenn (Position === 0) { wenn (diese.Länge == 1) { this.head = null this.tail = null } anders { dieser.Kopf = dieser.Kopf.Nächster this.head.prev = null } } sonst wenn (Position === diese.Länge -1) { aktuell = dies.tail dies.tail = dies.tail.prev dies.tail.next = null } anders { Variablenindex = 0 var vorherige = null während (Index++ < Position) { vorherige = aktuelle aktuell = aktuell.nächstes } vorheriges.nächstes = aktuelles.nächstes aktuell.nächstes.vorheriges = vorheriges } // 3.Länge-1 diese.Länge-- aktuelles Element zurückgeben } // Position des Elements in der verknüpften Liste abrufen DoublyLinkedList.prototype.indexOf = function (element) { // 1. Definieren Sie Variablen zum Speichern von Informationen var current = this.head Variablenindex = 0 // 2. Finden Sie die richtigen Informationen, während (aktuell) { wenn (aktuelles.Element === Element) { Rückgabeindex } Index++ aktuell = aktuell.nächstes } // 3. Wenn es an dieser Position nicht gefunden wird, geben Sie -1 zurück Rückgabe -1 } // Löschen entsprechend dem Element DoublyLinkedList.prototype.remove = function (element) { var index = this.indexOf(element) gib dies zurück.removeAt(index) } // Prüfen, ob es leer ist DoublyLinkedList.prototype.isEmpty = function () { gib diese Länge zurück === 0 } //Länge der verknüpften Liste abrufen DoublyLinkedList.prototype.size = function () { gib diese Länge zurück } // Holen Sie das erste Element DoublyLinkedList.prototype.getHead = function () { gib dieses.Kopfelement zurück } // Das letzte Element abrufen DoublyLinkedList.prototype.getTail = function () { gib dieses.tail.element zurück } // Implementierung der Traversierungsmethode // Vorwärts-Traversierungsmethode DoublyLinkedList.prototype.forwardString = function () { var aktuell = dieser.kopf var forwardStr = "" während (aktuell) { forwardStr += "," + aktuelles.element aktuell = aktuell.nächstes } returniere forwardStr.slice(1) } // Umgekehrte Durchquerungsmethode DoublyLinkedList.prototype.reverseString = function () { var aktuell = dies.tail var reverseStr = "" während (aktuell) { reverseStr += "," + aktuelles.element aktuell = aktuell.vorherige } returniere reverseStr.slice(1) } // Implementiere die toString-Methode DoublyLinkedList.prototype.toString = function () { gib dies zurück.forwardString() } } Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Lösung zur Deinstallation von Python und Yum im CentOs-System
>>: Prinzip der MySQL-Paging-Analyse und Effizienzverbesserung
Inhaltsverzeichnis 1. Einleitung 2. Umgebung und ...
Machen Sie einen leeren Bereich für Taobao: Wenn ...
1. Ein Container ist eine unabhängig laufende Anw...
1. Überlauf Überlauf ist Überlauf (Container). We...
Die Befehlszeile mysqld –skip-grant-tables kann i...
Aus Sicherheitsgründen erlaubt MySql-Server nur d...
Inhaltsverzeichnis 1. Kurzbeschreibung 2. Schritt...
Im vorherigen Artikel https://www.jb51.net/articl...
Inhaltsverzeichnis Redis auf Docker installieren ...
Grundlagen 1. Verwenden Sie Scaffolding, um ein P...
1. Erzielen Sie den Effekt 2 Wissenspunkte 2.1 &l...
Heute zeige ich Ihnen einen gut aussehenden Zähle...
Beim UI-Schnittprozess besteht die Seite häufig a...
1. Öffnen Sie die virtuelle CentOS 7-Maschine. 2....
Heute habe ich eine virtuelle Maschine für ein Ex...