鍊錶是一種可以變長的線性資料結構,鍊錶的長度是可以改變的,這就是數組中數組長度不能改變的問題。在本文中,我們將透過實作程式碼並檢查邊緣情況來找到給定鍊錶的長度。我們將在本文中使用 while 迴圈和類別概念。
問題簡介
在給定的問題中,我們得到一個鍊錶,首先,我們必須使用類別建立鍊錶,然後我們必須找到給定鍊錶的長度。由於鍊錶的長度是可以改變的,所以我們會在特定的程式碼點找到鍊錶的長度。
我們將使用兩種方法,首先是使用 while 迴圈的直接迭代方法,另一種是遞歸方法來尋找給定鍊錶的長度。
迭代方法
在此方法中,我們將首先使用類別為鍊錶提供結構來建立一個鍊錶。我們將定義一些函數,例如push函數,透過簡單地傳遞頭和資料來將值新增至鍊錶。
範例
在此過程中,我們將使用 while 迴圈、鍊錶的頭或起始節點以及一個變數來計算鍊錶中的節點數,即給定鍊錶的長度。
// 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 length(head){ temp = head; var count = 0 while(temp != null) { count++; temp = temp.next; } return count; } 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 = push(tail, 6) console.log("Length of the given linked list is: " + length(head))
在上面給出的方法中,我們沒有使用任何額外的空間,並且只遍歷鍊錶一次。因此,上述方法的時間複雜度為 O(N),其中 N 是鍊錶的大小,上述方法的空間複雜度為 O(1)。
遞迴方法
在此方法中,我們將遵循與上述方法中建立鍊錶相同的步驟,對於主要任務,我們將使用遞歸方法。
範例
使用與函數本身不同的參數和特定的基本條件來呼叫相同的函數稱為遞歸。在此方法中,我們將使用鍊錶的頭呼叫該函數,然後從該函數中,我們將再次呼叫該函數,但參數為目前節點的下一個節點。作為傳回值,我們將傳回 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 length(cur) { if(cur == null) return 0; return 1 + length(cur.next); } 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 = push(tail, 6) console.log("Length of the given linked list is: " + length(head))
時間與空間複雜度
遞歸方法的時間複雜度為 O(N),其中 N 是給定鍊錶中存在的節點數。上面程式碼的空間複雜度是O(N),因為總共有N次調用,而且對於每次調用,我們都必須維護當前的節點堆疊。
結論
在本教程中,我們學習如何透過實作程式碼並研究邊緣情況來尋找給定鍊錶的長度。我們在第一種方法中使用了本文中的 while 迴圈和類別概念,在第二種方法中使用了遞歸方法來尋找長度。兩種方法的時間複雜度均為 O(N),其中 N 是鍊錶的長度,而由於堆疊大小,遞歸方法的空間複雜度為 O(N)。
以上是用於尋找鍊錶長度的 JavaScript 程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器