À l'approche du festival du printemps, le projet est terminé et nous attendons tous de rentrer chez nous pour la nouvelle année. Vous trouverez ci-dessous la connaissance pertinente de l'éditeur étudiant la structure de données pour vous. La liste liée est une structure de données souvent utilisée. Je vais maintenant montrer ma propre implémentation comme suit. Bienvenue dans le grand maître pour obtenir des conseils.
La première version n'a pas de dernier nœud, et il commence à traverser le nœud racine à chaque fois
classe publique LinkedList <e> {Private Node Head; public LinkedList () {} public e getFirst () {if (head == null) {return null;} return head.value;} public linkedlist <e> addFirst (e e) {head.pre = new node (e, null, head); head = head.pre; e) {node lst = head; if (lst == null) {this.head = new node (e, null, null); return this;} else {while (true) {if (lst.next == null) {break;} else {lst = lst.next;}} lst.next = new nœud (e, lst, null); LinkedList <e> remove (e e) {node lst = head; if (lst == null) {throw new nullpointerException ("la liste liée est vide.");} Else {while (true) {if (e.equals (lst.value)) {// supprimer cet élément if (lst.pre! = null) {lst.pre.next = lst.next;} if (lst.next! = null) {lst.next.pre = lst.pre;} lst = null; Break;} lst = lst.next;} Renvoie ce StringBuffer ("["); nœud lst = this.head; while (lst! = Null) {buff.append (lst.value + ","); lst = lst.next;} return buff.substring (0, buff.length () - 1) + "]";} / ** node nœud nœud nœud {public nœud pré; valeur, nœud pre, nœud suivant) {this.value = valeur; this.pre = pre; this.next = next;}}}La deuxième version a le dernier nœud
classe publique LinkedList <e> {tête de nœud privé; nœud privé dernier; public likedList () {} public e getFirst () {if (head == null) {return null;} return head.value;} public e getlast () {if (last == null) {return null;} return last.Value;} e) {head.pre = new nœud (e, null, head); head = head.pre; return this;} public linkedList <e> addNode (e e) {node lst = dernier; if (lst == null) {// si le dernier nœud est vide, cette liste de liens est vide this.last = new nœud (e, null, null); this.head = this.last; renvoie ceci;} else {while (true) {if (lst.next == null) {// Break lst = head; if (lst == null) {throw new nullpointerException ("la liste liée est vide.");} else {while (true) {if (e.equals (lst.value)) {// supprimer cet élément if (lst.pre! = null) {lst.pre.next = lst.next;} if (lst.next! = null) {lst.next.pre = lst.pre;} lst = null; Break;} lst = lst.next;} Renvoie ce StringBuffer ("["); nœud lst = this.head; while (lst! = Null) {buff.append (lst.value + ","); lst = lst.next;} return buff.substring (0, buff.length () - 1) + "]";} / ** node nœud nœud nœud {public nœud pré; valeur, nœud pre, nœud suivant) {this.value = valeur; this.pre = pre; this.next = next;}}}Remarque: Aucune des deux versions ci-dessus ne considère l'utilisation sous le multithreading.
Ce qui précède est les connaissances pertinentes sur la mise en œuvre des listes liées bidirectionnelles (deux versions) présentées par l'éditeur. J'espère que cela vous sera utile.