鍊錶順時針旋轉的JavaScript程序
JavaScript 中鍊錶的基本結構可以使用 JavaScript 中的類別創建,然後可以將節點從一個位置移動到另一個位置以進行旋轉。在本文中,我們將學習如何在 JavaScript 程式語言中順時針旋轉鍊錶。我們將看到用於深入理解這些概念的程式碼。
在給定的問題中,我們給了一個鍊錶,我們必須以順時針方式旋轉它。這意味著,我們必須在每次移動中將最後一個元素放在第一位,如果我們必須旋轉 k 次,那麼我們必須將最後一個元素放在鍊錶的頭或起始節點之前。要建立我們之前看到的鍊錶,我們需要一個類別將資料和指向下一個元素的指標綁定在一起。
鍊錶結構
範例
首先,我們將建立一個類別節點,用於儲存目前節點的值和指向下一個節點的指標。之後,我們將建立一個推送函數來幫助建立連結列表,最後,我們將建立一個函數顯示來幫助列印連結列表。讓我們先看程式碼 -
// creating the class for the linked list class Node{ // defining the constructor for class constructor(){ this.next = null; // pointer to hold the next value this.value = 0; // curent value in the linked list } } // defining push function for linked list function push(head,data){ var new_node = new Node(); new_node.value = data; if(head == null){ return new_node; } var temp = head; while(temp.next != null){ temp = temp.next; } temp.next = new_node; return head; } function display(head){ var temp = head; var values = 0; while(temp){ values = values + temp.value + " -> "; temp = temp.next; } console.log(values + "null") } var head = null; for(var i = 1;i<6;i++){ head = push(head,i); } display(head)
在上面的程式碼中,我們使用 class 關鍵字建立了一個類,並使用「this」關鍵字建立了一個部分來儲存資料和指向類別建構函式中下一個節點的指標。 p>
之後,我們定義了一個推送函數,該函數將採用兩個參數,第一個參數是鍊錶的頭,第二個參數是我們要新增到鍊錶中的新節點的資料。在函數中,我們建立了新節點並將值儲存在其中。我們檢查頭是否為空(這意味著我們將添加第一個元素),然後我們將簡單地返回新節點,否則使用循環我們將轉到鍊錶的末尾並在那裡添加新節點。
問題的解決方法
建立類別並定義所需的基本函數後,我們將轉到主函數,在該函數中我們將定義將最後 k 個元素移至鍊錶前面的函數,該函數表示鍊錶的旋轉。有兩種方法可以將最後 k 個元素添加到第一個元素,這等於鍊錶的右旋轉,例如 -
我們給了一個鍊錶:1 -> 2 -> 3 -> 4 -> 5 ->null
我們想要以順時針方式旋轉列出的連結一次,那麼它看起來像這樣 -
5 -> 1 -> 2 -> 3 -> 4 -> null
同樣,對於鍊錶的旋轉3次,鍊錶將像這樣 -
Initially Linked list: 1 -> 2 -> 3 -> 4 -> 5 -> null After the first rotation: 5 -> 1 -> 2 -> 3 -> 4 -> null After the second rotation: 4 -> 5 -> 1 -> 2 -> 3 -> null After the third rotation: 3 -> 4 -> 5 -> 1 -> 2 -> null
我們有兩種方法來添加鍊錶前面的最後一個元素,要么一個一個地添加,要么一次全部添加。
逐一旋轉鍊錶
範例
在這種方法中,我們將轉到最後一個節點,然後將其移動到先前的頭節點並更新頭節點。讓我們先看一下程式碼 -
// creating the class for linked list class Node{ // defining the constructor for class constructor(){ this.next = null; // pointer to hold the next value this.value = 0; // curent value in the linked list } } // defining push function for linked list function push(head,data){ var new_node = new Node(); new_node.value = data; if(head == null){ return new_node; } var temp = head; while(temp.next != null){ temp = temp.next; } temp.next = new_node; return head; } function display(head){ var temp = head; var values = 0 while(temp){ values = values + temp.value + " -> "; temp = temp.next; } console.log(values + "null") } function rotate(head, k){ while(k--){ var temp = head; while(temp.next.next != null){ temp = temp.next; } var new_head = temp.next; temp.next = null; new_head.next = head; head = new_head; } return head; } var head = null; for(var i = 1;i<6;i++){ head = push(head,i); } head = rotate(head,3); display(head);
在上面的程式碼中,我們使用了上面定義的基本函數鍊錶的程式碼,只是新增了一個新函數來旋轉鍊錶。
在函數rotate中,我們首先使用while循環遍歷鍊錶k次,並且在每次迭代中,我們都到達鍊錶的倒數第二個元素。然後我們從鍊錶中刪除鍊錶的最後一個元素,並將其放在鍊錶頭部之前的前面。最後,我們返回了新的頭,並使用顯示函數顯示了新的鍊錶。
時間與空間複雜度
我們已經移動了鍊錶 k 次,鍊錶的大小是 N,所以程式的整體時間複雜度是 O(N*K)。另外,我們沒有使用任何額外的空間,因此程式的空間複雜度是 O(1),這是一個常數。
一次旋轉鍊錶
在前面的程式碼中,我們將元素逐一添加,這花費了 O(N*N) 的時間,以便我們可以更好地移動鍊錶並獲取鍊錶的大小。之後,我們將再次遍歷鍊錶並獲取最後 k 個元素並將它們添加到鍊錶的前面,這將使程式的時間複雜度為 O(1)。
結論
在本教學中,我們學習如何在 JavaScript 程式語言中順時針旋轉鍊錶。我們已經看到了深入理解概念的程式碼。 JavaScript 中鍊錶的基本結構可以使用 JavaScript 中的類別來創建,然後可以將節點從一個位置移動到另一個位置以進行旋轉。程式的時間複雜度為O(N*N),可以進一步提升到O(N),而程式的空間複雜度為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調試,專注於設置斷點,使用控制台和分析性能。

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

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

本教程將介紹如何使用 Chart.js 創建餅圖、環形圖和氣泡圖。此前,我們已學習了 Chart.js 的四種圖表類型:折線圖和條形圖(教程二),以及雷達圖和極地區域圖(教程三)。 創建餅圖和環形圖 餅圖和環形圖非常適合展示某個整體被劃分為不同部分的比例。例如,可以使用餅圖展示野生動物園中雄獅、雌獅和幼獅的百分比,或不同候選人在選舉中獲得的投票百分比。 餅圖僅適用於比較單個參數或數據集。需要注意的是,餅圖無法繪製值為零的實體,因為餅圖中扇形的角度取決於數據點的數值大小。這意味著任何占比為零的實體

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