前言
前端也要搞好數據結構哦!
用JavaScript實現了個單鏈表,通過LinkedList構造函數可實例化一個單鏈表數據結構的對象,所有的方法放到LinkedList構造函數的原型對象上,寫了暫時能想到的所有方法
GitHub源碼地址,下載可運行
實現
方法介紹
查找
obj.find(item)通過item元素內容查找到該元素 obj.findIndex(index)通過index索引查找到該元素 obj.findIndexOf(item)通過item元素內容查找到該元素索引 obj.findPrev(item)通過item元素查找上一個節點元素添加
obj.insert(item,newElement)在item元素后插入新元素 obj.push(item)在鏈表末尾插入item元素 obj.insertIndex(index,newElement)在index索引處插入新元素刪除
obj.remove(item)刪除item元素 obj.removeIndex(index)刪除index索引處節點其他
obj.size()返回該鏈表的長度 obj.display()數組形式返回該鏈表,便于觀察,測試 obj.reversal()鏈表順序反轉(遞歸)方法代碼
鏈表類LinkedList
function LinkedList (...rest) { this._head = new Node('_head') // 鏈表頭節點 // 如果new時有傳進值,則添加到實例中 if (rest.length) { this.insert(rest[0], '_head') for (let i = 1; i < rest.length; i++) { this.insert(rest[i], rest[i - 1]) } } } LinkedList.prototype.find = find LinkedList.prototype.findPrev = findPrev LinkedList.prototype.findIndex = findIndex LinkedList.prototype.findIndexOf = findIndexOf LinkedList.prototype.push = push LinkedList.prototype.insert = insert LinkedList.prototype.insertIndex = insertIndex LinkedList.prototype.remove = remove LinkedList.prototype.removeIndex = removeIndex LinkedList.prototype.size = size LinkedList.prototype.display = display LinkedList.prototype.reversal = reversal創建新節點類Node
function Node (element) { this.element = element this.next = null }obj.find(item)
// 查找函數,在鏈表中查找item的位置,并把它返回,未找到返回-1 function find (item) { let currNode = this._head while (currNode !== null && currNode.element !== item) { currNode = currNode.next } if (currNode !== null) { return currNode } else { return null } }obj.findIndex(index)
// 通過元素的索引返回該元素 function findIndex (index) { let currNode = this._head let tmpIndex = 0 while (currNode !== null) { // 找到該index位置,返回當前節點,出去頭結點 if (tmpIndex === index + 1) { return currNode } tmpIndex += 1 currNode = currNode.next } return null }
新聞熱點
疑難解答
圖片精選