JS實現雙向鍊錶

2022-04-08 08:29:47 字數 2643 閱讀 6960

js實現雙向鍊錶

function

doublylinkedlist() ;

var length = 0,

head = null

;

//向尾部追加

(element)

else

previous.next =node

node.prev =previous

}length ++;

return

true

; }

//指定位置插入

this.insert = function

(position, element)

else

}else

if (position !=length)

previous.next =node;

node.prev =previous;

}length ++;

return

true

; }

else

}; //刪除指定位置元素

this.removeat = function

(position)

else

if(position === length - 1)

else

}; length--;

return

current.element;

}else

}; //刪除值為element的所有元素

this.removeele = function

(element)

previous =current;

current =current.next;

while

(current)

current=current.next;

length--;

num++;

}else

}return

num;

}; //刪除尾部

this.remove = function

() ;

var current =head,

previous;

if (length === 1)

while

(current.next)

previous.next = null

; length--;

return

current.element;

}; //當前元素的其實位置

this.indexof = function

(element) ;

current =current.next;

index++;

}return

false

; };

//是否為空

this.isempty = function

() ;

//鍊錶長度

this.size = function

() ;

//轉成字串

this.tostring = function

()

return

string;

}; //獲取頭結點元素

this.gethead = function

() ;

//獲取未結點元素

this.gettail = function

()

return

previous.element;

}; }let mylink = new

doublylinkedlist();

mylink.insert(3, 'd')

mylink.insert(5, 'f')

mylink.insert(0, 'g')

console.log(mylink.tostring())

//gabcdef

mylink.removeat(0) //

刪除gmylink.removeat(5) //

刪除fconsole.log(mylink.remove()) //

刪除econsole.log(mylink.tostring()) //

abcd

向尾部增加d

console.log(mylink.tostring()) //

abcdd

console.log(mylink.removeele('d')) //

刪除所有d,列印刪除d的個數 2

console.log(mylink.tostring()) //

abcconsole.log(mylink.indexof('b')) //

列印b的位置 1

console.log(mylink.size()) //

列印鍊錶的長度 3

console.log(mylink.gethead()) //

aconsole.log(mylink.gettail()) //

c

雙向迴圈鍊錶:將雙向鍊錶的頭尾指標相連,就構成了雙向迴圈鍊錶。這種鍊錶從任意乙個節點都可以同時向兩個方向進行節點遍歷。

JS實現雙向鍊錶

每個結點包含三部分,指向前乙個結點的指標 pre 指向後乙個節點的指標 next 以及自己的資料部分 element 於是我們就可以先寫出結點物件 function node 定義結點物件 function node element 然後我們開始實現插入鍊錶的演算法 宣告 下面函式中的this是我們...

JS實現單向鍊錶 雙向鍊錶 迴圈鍊錶

鍊錶儲存有序的元素的集合,但是和陣列不同的是,鍊錶中的元素在記憶體中的儲存並不是連續的。每乙個鍊錶元素都包含了乙個儲存元素本身的節點和乙個指向下乙個元素的引用。看起來就像這樣 相對於傳統的陣列,鍊錶的乙個好處就是增刪的時候無需移動其它元素,只要更改指標的指向就可以了。但是缺點就是如果想要訪問鍊錶中的...

JS 雙向鍊錶

雙向鍊錶 雙向鍊錶 單鏈表只能從頭節點開始訪問鍊錶中的資料元素,如果需要逆序訪問單鏈表中的資料元素將極其低效。從鍊錶的頭節點遍歷到尾節點很簡單,但反過來從後向前遍歷則沒那麼簡單。通過給node物件增加乙個屬性,該屬性儲存指向前驅節點的鏈結,這樣就容易多了。此時,向鍊錶插入乙個節點需更多的工作,需指出...