JavaScript 雙向鏈表操作實(shí)例分析【創(chuàng)建、增加、查找、刪除等】
本文實(shí)例講述了JavaScript 雙向鏈表操作。分享給大家供大家參考,具體如下:
一個 雙向鏈表(doubly linked list) 是由一組稱為節(jié)點(diǎn)的順序鏈接記錄組成的鏈接數(shù)據(jù)結(jié)構(gòu)。每個節(jié)點(diǎn)包含兩個字段,稱為鏈接,它們是對節(jié)點(diǎn)序列中上一個節(jié)點(diǎn)和下一個節(jié)點(diǎn)的引用
開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)的上一個鏈接和下一個鏈接分別指向某種終止節(jié)點(diǎn),通常是前哨節(jié)點(diǎn)或null,以方便遍歷列表。如果只有一個前哨節(jié)點(diǎn),則列表通過前哨節(jié)點(diǎn)循環(huán)鏈接。它可以被概念化為兩個由相同數(shù)據(jù)項組成的單鏈表,但順序相反。
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)位置對應(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('找不到要刪除對應(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錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
JavaScript創(chuàng)建類/對象的幾種方式概述及實(shí)例
JS中的對象強(qiáng)調(diào)的是一種復(fù)合類型,JS中創(chuàng)建對象及對對象的訪問是極其靈活的,下面與大家分享下創(chuàng)建類/對象的幾種方式,感興趣的朋友可以了解下哈2013-05-05JS性能優(yōu)化實(shí)現(xiàn)方法及優(yōu)點(diǎn)進(jìn)行
這篇文章主要介紹了JS性能優(yōu)化實(shí)現(xiàn)方法及優(yōu)點(diǎn)進(jìn)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08javascript實(shí)現(xiàn)網(wǎng)頁端解壓并查看zip文件
昨天給大家分享了在網(wǎng)頁端使用zip.js插件實(shí)現(xiàn)在線壓縮文件的代碼,今天給大家分享一下javascript實(shí)現(xiàn)網(wǎng)頁端解壓并查看zip文件的方法,非常的實(shí)用,有需要的小伙伴可以參考下2015-12-12JS實(shí)現(xiàn)簡單的右下角彈出提示窗口完整實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)簡單的右下角彈出提示窗口的方法,可實(shí)現(xiàn)點(diǎn)擊連接右下角彈出提示框的功能,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06Safari 中 filter: blur() 高斯模糊引發(fā)的性能問題及解決方案
在Safari瀏覽器中使用CSS濾鏡如filter:blur()時,可能會遇到性能問題,如頁面卡頓和小方塊現(xiàn)象,這些問題通常與渲染機(jī)制和硬件加速的缺失有關(guān),通過開啟硬件加速,如使用transform:translate3d(0,0,0),可以有效解決這些問題,并提升用戶體驗2024-10-10javascript獲取系統(tǒng)當(dāng)前時間的方法
這篇文章主要介紹了javascript獲取系統(tǒng)當(dāng)前時間的方法,格式為:2015年11月19日 星期四09:21:05,需要的朋友可以參考下2015-11-11微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序
最近在寫小程序過程中遇到一個拖拽排序需求,上網(wǎng)一頓搜索未果,遂自行實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序圖片上傳組件實(shí)現(xiàn)圖片拖拽排序的相關(guān)資料,需要的朋友可以參考下2022-03-03