JavaScript 雙向鏈表操作實(shí)例分析【創(chuàng)建、增加、查找、刪除等】
本文實(shí)例講述了JavaScript 雙向鏈表操作。分享給大家供大家參考,具體如下:
一個(gè) 雙向鏈表(doubly linked list) 是由一組稱為節(jié)點(diǎn)的順序鏈接記錄組成的鏈接數(shù)據(jù)結(jié)構(gòu)。每個(gè)節(jié)點(diǎn)包含兩個(gè)字段,稱為鏈接,它們是對(duì)節(jié)點(diǎn)序列中上一個(gè)節(jié)點(diǎn)和下一個(gè)節(jié)點(diǎn)的引用
開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)的上一個(gè)鏈接和下一個(gè)鏈接分別指向某種終止節(jié)點(diǎn),通常是前哨節(jié)點(diǎn)或null,以方便遍歷列表。如果只有一個(gè)前哨節(jié)點(diǎn),則列表通過前哨節(jié)點(diǎn)循環(huán)鏈接。它可以被概念化為兩個(gè)由相同數(shù)據(jù)項(xiàng)組成的單鏈表,但順序相反。
class DNode {
constructor(val) {
this.val = val;
this.prev = null;
this.next = null;
}
}
增加節(jié)點(diǎn)
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('未找到指定要插入節(jié)點(diǎn)位置對(duì)應(yīng)的值!')
}
}
展示
// 順序
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('找不到要?jiǎng)h除對(duì)應(yīng)的節(jié)點(diǎn)');
}
}
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
javascript中l(wèi)ayim之查找好友查找群組
這篇文章主要介紹了javascript中l(wèi)ayim之查找好友查找群組,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Javascript 對(duì)象(object)合并操作實(shí)例分析
這篇文章主要介紹了Javascript 對(duì)象(object)合并操作,結(jié)合實(shí)例形式分析了javascript基于jQuery的extend方法、對(duì)象屬性、遍歷賦值等操作實(shí)現(xiàn)對(duì)象合并相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-07-07
JS數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列結(jié)構(gòu)詳解
隊(duì)列指的是一種受限的線性表,先進(jìn)先出,今天通過本文帶領(lǐng)大家認(rèn)識(shí)隊(duì)列及隊(duì)列的應(yīng)用,對(duì)JS數(shù)據(jù)結(jié)構(gòu)與算法-隊(duì)列結(jié)構(gòu)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-11-11
javascript開發(fā)實(shí)現(xiàn)貪吃蛇游戲
這篇文章主要為大家詳細(xì)介紹了javascript開發(fā)實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
詳解javascript傳統(tǒng)方法實(shí)現(xiàn)異步校驗(yàn)
這篇文章主要為大家介紹了javascript實(shí)現(xiàn)異步校驗(yàn)的方法,感興趣的小伙伴們可以參考一下2016-01-01
TypeScript 中如何限制對(duì)象鍵名的取值范圍
TypeScript由微軟開發(fā)的自由和開源的編程語言,是一種給 JavaScript 添加特性的語言擴(kuò)展,接下來通過本文給大家介紹TypeScript 中如何限制對(duì)象鍵名的取值范圍,感興趣的朋友跟隨小編一起看看吧2021-05-05
Javascript的各種節(jié)點(diǎn)操作實(shí)例演示代碼
實(shí)例演示對(duì)javascript的節(jié)點(diǎn)的各種操作。包括hasChildNodes(),removeChild(),appendChild(),replaceChild(),insertBefore(),cloneNode()等2012-06-06

