js 實現鍊錶

2021-07-29 11:57:45 字數 1851 閱讀 5817

我們通常會在c++這類語言中學習到鍊錶的概念,但是在js中由於我們可以動態的擴充陣列,加之有豐富的原生api。我們通常並不需要實現鍊錶結構。由於突發奇想,我打算用js實現一下:

首先我們要建立鍊錶:

1

//建立鍊錶

2function

createlinknode(data, pre, next)

8this.nextnode =next;

9 }

鍊錶最基本的要包括資料部分(data)、指向前乙個的指標(prenode)、指向後乙個的指標(nextnode)。

為了便於觀察結果,我們再寫乙個列印鍊錶的函式,掛在原型上:

1

//從模乙個節點開始列印鍊錶

2 createlinknode.prototype.print = function

()else

9 }

列印的函式由某乙個節點呼叫,遞迴呼叫,拼裝從此之後的所有節點的資料部分。

增刪改查都要有吧:

1

//從某乙個節點的後面開始插入乙個節點

2 createlinknode.prototype.insertnode = function

(node)

67 node.nextnode = this

.nextnode;

89 node.prenode = this;10

this.nextnode =node;11}

1213

//刪除某乙個節點

14 createlinknode.prototype.removenode = function

()

插入節點: 在當前的節點後面插入乙個節點物件。注意一下,如果當前節點是尾節點時的單獨處理。

還要有最不能少的反序:

1

//反序鍊錶

2 createlinknode.prototype.revertnode = function

();4

function

revert()else15}

1617

return revert.call(this

);18

19 }

保證鍊錶基本機構不變,並要返回新的頭節點(原來的尾節點)。和對尾節點的單獨處理。

我們來測試一下(好激動)

1

//start

2var ln1 = new createlinknode(, null, null);3

var ln2 = new createlinknode(, ln1, null);4

var ln3 = new createlinknode(, ln2, null);5

var ln4 = new createlinknode(, ln3, null);6

var ln5 = new createlinknode(, null, null);7

var lhead =ln1;

8ln4.insertnode(ln5);

910 console.log(lhead.print());//

12345

1115

ln3.removenode();

16 console.log(lhead.print());//

1245

17ln2.insertnode(ln3);

18 console.log(lhead.print());//

12345

19 lhead =lhead.revertnode();

20 console.log(lhead.print());//

54321

js實現鍊錶

平時我們使用最多的資料結構應該是陣列,很多東西都可以用陣列來輕鬆實現,但在某些程式語言中,陣列的長度是預先設定好的,想要額外新增元素或者刪除元素是一件比較困難的事。那麼使用鍊錶的話恰恰就解決了這些問題,對於鍊錶來說刪除或新增乙個元素是非常方便的,除了資料的隨機訪問 可以實現但是比較麻煩,比如可以通過...

單向鍊錶JS實現

可以排序,增加,查詢,刪除的單向鍊錶 function linknode key,value function link link.prototype add function key,value var node new linknode key,value if this.count 0 thi...

使用js實現鍊錶

鍊錶是一種動態的資料結構,不同於陣列的是,鍊錶分配記憶體空間的靈活性,它不會像陣列一樣被分配一塊連續的記憶體。當你想在陣列的任意位置,插入乙個新值的時候,必須對陣列中的各個元素進行相應的位置移動才能達到目標,開銷顯然是很大的。然而鍊錶的靈活性在於它的每個元素節點分為兩部分,一部分是儲存元素本身,另一...