在鍊錶中插入節點的 JavaScript 程式
鍊錶是具有不同長度的資料結構,任何節點都可以刪除或新增到鍊錶中。在本教程中,我們將實作一個完整的程序,用於在具有空間和時間複雜度的鍊錶中插入節點。讓我們先了解問題陳述。
問題簡介
在給定的問題中,我們給出一個鍊錶,由於我們可以透過在鍊錶中新增或刪除節點來更改鍊錶的大小,因此我們將在鍊錶中新增或插入節點。
在鍊錶中,我們可以在三個不同的位置新增節點:最前面的節點、最後一個節點之後、鍊錶的中間。例如,給定的鍊錶是 -
1 -> 2 -> 3 -> 4 -> 5 -> null,我們必須新增一個值為 9 的隨機節點。因此,有很多情況需要添加節點,例如 -
在起始處新增節點 - 7 -> 1 -> 2 -> 3 -> 4 -> 5 -> null
在中間加入節點 - 1 -> 2 -> 3 -> 7 -> 4 -> 5 -> null
在最後新增節點 - 1 -> 2 -> 3 -> 4 -> 5 -> 7 -> null
讓我們看看實作以下任務的方法 -
在鍊錶開頭新增節點
範例
要在鍊錶的開頭新增節點,我們必須建立新節點並將鍊錶的頭作為下一個節點傳遞給新節點,然後將頭移到新節點,新增節點節點到鍊錶的開頭。
// creating the linked list node class Node { constructor(data) { this.value = data; this.next = null; } } function push(tail, data){ var new_node = new Node(data); tail.next = new_node; tail = tail.next; return tail } function add(data) { var new_node = new Node(data); new_node.next = head; return new_node; } var head = new Node(1); var tail = head; tail = push(tail, 2) tail = push(tail, 3) tail = push(tail, 4) tail = push(tail, 5) head = add(7); var data = 0; while(head != null) { data = data + head.value + " -> "; head = head.next; } console.log("Linked List after adding a node at starting: ") console.log(data + "null")
上述程式碼的時間複雜度為 O(1),因為我們只需移動一個指針,同樣沒有使用額外的空間,使得空間複雜度為 O(1)。
在鍊錶中間加入節點
範例
要在鍊錶中間新增節點,我們必須建立新節點並傳遞該節點,然後才能將鍊錶的新節點新增為新節點的下一個節點,這會新增新節點節點到中間的鍊錶。
// creating the linked list node class Node { constructor(data) { this.value = data; this.next = null; } } function push(tail, data) { var new_node = new Node(data); tail.next = new_node; tail = tail.next; return tail } function add(data,head) { var new_node = new Node(data); var temp = head; while(temp.value != 3) { temp = temp.next; } new_node.next = temp.next; temp.next = new_node; return head; } var head = new Node(1); var tail = head; tail = push(tail, 2) tail = push(tail, 3) tail = push(tail, 4) tail = push(tail, 5) head = add(7,head); var data = 0; while(head != null) { data = data + head.value + " -> "; head = head.next; } console.log("Linked List after adding node in middle:") console.log(data + "null")
上述程式碼的時間複雜度是 O(N),因為我們必須移動到需要新增節點的節點。上述過程的空間複雜度是 O(1),因為我們沒有使用任何額外的空間。
在鍊錶末端新增節點
範例
要在鍊錶末尾新增節點,我們必須建立一個新節點,並將該節點新增到尾節點之後,並將尾節點移至下一個節點。
// creating the linked list node class Node { constructor(data) { this.value = data; this.next = null; } } function push(tail, data) { var new_node = new Node(data); tail.next = new_node; tail = tail.next; return tail } function add(data) { var new_node = new Node(data); tail.next = new_node; tail = tail.next return tail; } var head = new Node(1); var tail = head; tail = push(tail, 2) tail = push(tail, 3) tail = push(tail, 4) tail = push(tail, 5) tail = add(7); var data = 0; while(head != null){ data = data + head.value + " -> "; head = head.next; } console.log("Linked List after adding a node at the end: ") console.log(data + "null")
上述程式碼的時間複雜度為 O(1),因為我們只需移動一個指針,同樣沒有使用額外的空間,使得空間複雜度為 O(1)。
結論
在上面的教程中,我們學習如何透過三種可能的方式在現有鍊錶中新增節點。我們已經看到了帶有解釋的正確程式碼以及時間和空間複雜性。在鍊錶中間加入一個節點需要 O(N) 時間,而對於其他兩種情況,其時間複雜度為 O(1),對於所有三種可能性,空間複雜度都是 O(1)。
以上是在鍊錶中插入節點的 JavaScript 程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...
