鍊錶是具有不同長度的資料結構,任何節點都可以刪除或新增到鍊錶中。在本教程中,我們將實作一個完整的程序,用於在具有空間和時間複雜度的鍊錶中插入節點。讓我們先了解問題陳述。
問題簡介
在給定的問題中,我們給出一個鍊錶,由於我們可以透過在鍊錶中新增或刪除節點來更改鍊錶的大小,因此我們將在鍊錶中新增或插入節點。
在鍊錶中,我們可以在三個不同的位置新增節點:最前面的節點、最後一個節點之後、鍊錶的中間。例如,給定的鍊錶是 -
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中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

WebStorm Mac版
好用的JavaScript開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

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