1. 程式人生 > 程式設計 >JavaScript 雙向連結串列操作例項分析【建立、增加、查詢、刪除等】

JavaScript 雙向連結串列操作例項分析【建立、增加、查詢、刪除等】

本文例項講述了JavaScript 雙向連結串列操作。分享給大家供大家參考,具體如下:

一個 雙向連結串列(doubly linked list) 是由一組稱為節點的順序連結記錄組成的連結資料結構。每個節點包含兩個欄位,稱為連結,它們是對節點序列中上一個節點和下一個節點的引用

開始節點和結束節點的上一個連結和下一個連結分別指向某種終止節點,通常是前哨節點或null,以方便遍歷列表。如果只有一個前哨節點,則列表通過前哨節點迴圈連結。它可以被概念化為兩個由相同資料項組成的單鏈表,但順序相反。

class DNode {
 constructor(val) {
  this.val = val;
  this.prev = null;
  this.next = null;
 }
}

增加節點

function add(el) {
  var currNode = this.head;
  while (currNode.next != null) {
    currNode = currNode.next;
  }
  var newNode = new DNode(el);
  newNode.next = currNode.next;
  currNode.next = newNode;
}

查詢

function find(el) {
  var currNode = this.head;
  while (currNode && currNode.el != el) {
    currNode = currNode.next;
  }
  return currNode;
}

插入

function (newEl,oldEl) {
  var newNode = new DNode(newEl);
  var currNode = this.find(oldEl);
  if (currNode) {
    newNode.next = currNode.next;
    newNode.prev = currNode;
    currNode.next = newNode;
  } else {
    throw new Error('未找到指定要插入節點位置對應的值!')
  }
}

展示

// 順序
function () {
  var currNode = this.head.next;
  while (currNode) {
    console.log(currNode.el);
    currNode = currNode.next;
  }
}

// 逆序
function () {
  var currNode = this.head;
  currNode = this.findLast();
  while (currNode.prev != null) {
    console(currNode.el);
    currNode = currNode.prev;
  }
}

刪除

function (el) {
  var currNode = this.find(el);
  if (currNode && currNode.next != null) {
    currNode.prev.next = currNode.next;
    currNode.next.prev = currNode.prev;
    currNode.next = null;
    currNode.previous = null;
  } else {
    throw new Error('找不到要刪除對應的節點');
  }
}

感興趣的朋友可以使用線上HTML/CSS/JavaScript程式碼執行工具:http://tools.jb51.net/code/HtmlJsRun測試上述程式碼執行效果。

更多關於JavaScript相關內容感興趣的讀者可檢視本站專題:《JavaScript數學運算用法總結》、《JavaScript資料結構與演算法技巧總結》、《JavaScript陣列操作技巧總結》、《JavaScript排序演算法總結》、《JavaScript遍歷演算法與技巧總結》、《JavaScript查詢演算法技巧總結》及《JavaScript錯誤與除錯技巧總結》

希望本文所述對大家JavaScript程式設計有所幫助。