這篇文章主要是針對上一篇文章的程式碼實踐,更多相關介紹請 移步。
構建
整個連結串列是基於 JavaScript 的類來實現的
constructor() {
/**
* @type {LinkedListNode}
*/
this.head = null
/**
* @type {LinkedListNode}
*/
this.tail = null
/**
* The size of Linked list
* @type {number}
*/
this.count = 0
}
根據陣列來構建連結串列
/**
* Building Linked list by array.
* @param {array} array
*/
build(array) {
this.count = array.length
for (let i = 0; i < array.length; i++) {
const newNode = new LinkedListNode(array[i])
this.__insertToEnd(newNode)
}
}
主要的方法實現
大的來說,這兒主要就實現兩個方法,插入和刪除。
/**
* Append element to the end of the linked list
* @param value
* @returns {LinkedList}
*/
append(value) {
const newNode = new LinkedListNode(value)
this.__insertToEnd(newNode)
this.count++
return this
}
刪除這兒會稍微麻煩一點兒,需要逐個去查詢(預設會出現重複項)
/**
* Delete element when it equal the pass value.
* @param value
* @returns {null}
*/
delete(value) {
if (!this.head) {
return null
}
let deleteNode = null
// Delete element when position is head.
while (this.head && this.head.value === value) {
deleteNode = this.head
this.head = this.head.next
this.count--
}
let currentNode = this.head
// Delete element when item's position is between head and tail.
if (currentNode !== null) {
while (currentNode.next) {
if (value === currentNode.next.value) {
deleteNode = currentNode.next
currentNode.next = currentNode.next.next
this.count--
} else {
currentNode = currentNode.next
}
}
}
// Delete element when item's position is tail.
if (value === this.tail.value) {
this.tail = currentNode
this.count--
}
return deleteNode
}
結束語
另外,有個 __insertToEnd
作為內部方法,感興趣的可以去看看原始碼。還有就是本系列文章是利用 AVA 做為測試框架的,如果有人感興趣的話,後續會另外開一篇文章詳細介紹。
原始碼詳見 https://github.com/MasterShu/JavaScript-Da...
本作品採用《CC 協議》,轉載必須註明作者和本文連結