iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
佛心分享-IT 人自學之術

演算法與資料結構入門:30天基礎學習之旅系列 第 26

Implement a Linked List with insertAt/removeAt/get method in javascript-day 26

  • 分享至 

  • xImage
  •  

本篇的完整程式碼在這裡

原本的 array method 並沒有 insertAt & removeAt
如果要 insert element into specific index 詳情請看這裡

不過這裡來為 Linked List 繼續添加 insertAt/removeAt 的 method
好讓我們可以從 特定位置新增/移除 Node

insertAt/removeAt

insertAt method 執行的內容:

insert new Node at specific value of index

insertAt 這邊分成幾種可能來看

  • index < 0 / index > Linked List => return null
  • index = 0 正好就是 unshift在做的事
  • index = this.length 正好就是 push在做的事
  • 0 < index < this.length
    1. traverse to index-1 position
    2. set newNode.next to Node at index-1.next
    3. set Node at index-1.next to newNode
    4. this.length++
 insertAt(value, index) {
     if (index > this.length || index < 0) {
         return null;
     }

     if (index === 0) {
         this.unshift(value);
         return;
     } else if (index === this.length) {
         this.push(value);
         return;
     }

     let newNode = new Node(value);
     let currentNode = this.head;
     for (let i = 1; i < index; i++) {
         currentNode = currentNode.next;
     }
     newNode.next = currentNode.next;
     currentNode.next = newNode;
}

removeAt method 執行的內容:

remove Node at specific index

removeAt 這邊分成幾種可能來看

  • index < 0 / index > length of Linked List-1 => return null
  • index = 0 正好就是 shift在做的事
  • index = this.length-1 正好就是 pop在做的事
  • 0 < index < this.length-1
    1.traverse to index-2 position
    2.set next of Node at index-1 = the removed Node.next
    3.this.length--
removeAt(index) {
          if (index < 0 || index > this.length - 1) {
            return null;
          } else if (index === 0) {
            this.shift();
          } else if (index === this.length - 1) {
            this.pop();
          } else {
            let currentNode = this.head;
            for (let i = 1; i < index - 1; i++) {
              currentNode = currentNode.next;
            }
            let temp = currentNode.next;
            currentNode.next = temp.next;
            this.length--;
            return;
          }
}

Get method 執行的內容:

get value of Node at specific position

  • traverse to specific position
  • return the value of Node at specific position
get(index){
    if(index>this.length || index <0){
        return;
    }else{
        let currentNode = this.head;
        for(let i =1;i<=index;i++){
            currentNode = currentNode.next;
        }
        return currentNode.value;
    }
}

這樣寫完一輪,是不是對 Linked List 跟 Node 之間更有概念了呢?


上一篇
How to Implement a Linked List with Shift/UnShift methods in javascript-day 25
下一篇
Types of Linked List-day 27
系列文
演算法與資料結構入門:30天基礎學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言