JavaScript實現單鏈表
阿新 • • 發佈:2018-12-16
功能
get(index):獲取連結串列中第 index 個節點的值。如果索引無效,則返回-1。 addAtHead(val):在連結串列的第一個元素之前新增一個值為 val 的節點。插入後,新節點將成為連結串列的第一個節點。 addAtTail(val):將值為 val 的節點追加到連結串列的最後一個元素。 addAtIndex(index,val):在連結串列中的第 index 個節點之前新增值為 val 的節點。如果 index 等於連結串列的長度,則該節點將附加到連結串列的末尾。如果 index 大於連結串列長度,則不會插入節點。 deleteAtIndex(index):如果索引 index 有效,則刪除連結串列中的第 index 個節點
程式碼
思路: 使用object來構造層層遞進的單鏈表,如{ element: ‘1’, next: { element: ‘2’, next: null } }
// 資料形式:Node { element: ‘1’, next: { element: ‘2’, next: null } } var MyLinkedList = function() { this.head = null this.len = 0 }; MyLinkedList.prototype.createNode = function(val) { let nodeObj = {element: val, next: null} return nodeObj }; MyLinkedList.prototype.get = function(index) { let tempNode = this.head // 連結串列頭 if(index === 0 && this.len > 0) { return tempNode.element } if(index >= this.len) { return -1 } // 獲取索引為index的節點 for(let i = 0;i < index;i++) { tempNode = tempNode.next } return tempNode.element }; MyLinkedList.prototype.addAtHead = function(val) { let node = this.createNode(val) node.next = this.head this.head = node this.current = node this.len++ }; MyLinkedList.prototype.addAtTail = function(val) { let node = this.createNode(val) let tempNode = this.head while(tempNode.next) { tempNode = tempNode.next } tempNode.next = node this.len++ }; MyLinkedList.prototype.addAtIndex = function(index, val) { let tempNode = this.head let nextNode = null let node = this.createNode(val) if(index > this.len) { return } // 連結串列頭 if(index === 0) { // 連結串列頭新增 if(this.len === 0) { this.head = node } else { // 非空連結串列 this.addAtHead(val) } this.len++ return } // 獲取index前的節點 for(let i = 0; i < index - 1;i++) { tempNode = tempNode.next } nextNode = tempNode.next node.next = nextNode tempNode.next = node this.len++ }; MyLinkedList.prototype.deleteAtIndex = function(index) { if(index > 0 && index < this.len) { let tempNode = this.head // 獲取索引為index-1的節點 for(let i = 1;i < index;i++) { tempNode = tempNode.next } tempNode.next = tempNode.next.next this.len-- } // 連結串列頭 if(index === 0) { this.head = this.head.next this.len-- } }; MyLinkedList.prototype.showLinkList = function() { console.log(this.head) } // 除錯 var linkList = new MyLinkedList() linkList.addAtHead('1') linkList.addAtIndex(1,'2') linkList.addAtIndex(0,'3') linkList.addAtTail('4') linkList.addAtTail('5') linkList.deleteAtIndex(2) linkList.deleteAtIndex(0) linkList.showLinkList() console.log('索引為2的元素: ',linkList.get(2))
結果:{ element: '1', next: { element: '4', next: { element: '5', next: null } } }