日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在這個程序中,我們將得到一個可能包含循環的鏈表,我們必須找出循環是否存在,然后循環的大小是多少。讓我們使用一個非常著名的方法來借助代碼來查找循環的長度,并討論其時間和空間復雜度。

問題簡介

在這個問題中,正如我們上面所看到的,我們給出了一個鏈表,其中可能包含也可能不包含循環,如果循環存在,我們必須找到循環的長度,否則我們必須返回零,因為有不存在循環。我們將使用 Floyd 循環方法來查找循環,然后檢查其大小。例如,如果我們給出一個鏈表 –

List: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8

登錄后復制

從包含 8 的節點到包含 4 的節點存在一個循環,這意味著 8 與 4 連接,形成長度為 5 的循環,我們必須檢測它。

方法

在本題中,我們將使用Floyd循環方法來檢測循環,然后我們將使用長度查找的概念來查找循環的長度。讓我們首先看看問題的基本步驟,然后我們將轉向弗洛伊德方法和長度方法。

    首先,我們將創建一個類來提供鏈表節點的基本結構,并在其中定義構造函數來初始化節點值。

    然后我們創建了一個函數來將元素推送到給定的鏈表中。

    我們使用上面的方法創建了一個鏈表,然后將最后一個節點鏈接到另一個節點以在其中形成一個循環。

    弗洛伊德算法

    在這個算法中,我們遍歷鏈表,一旦進入鏈表,就不能從任何節點出去。這意味著,如果我們在鏈表循環部分有兩個指針,其中一個指針一次移動一個節點,另一個指針一次移動兩個節點,它們將在某一點相遇。

      實現算法后,我們將調用該函數并檢查循環是否存在

      如果存在循環,我們將調用 anther 函數來查找循環的長度。

      另一方面,我們將返回并打印不存在循環。

      示例

      在下面的示例中,我們定義一個鏈表并向其中添加 8 個節點。我們通過將節點 8 連接到節點 4 來形成鏈表中的循環。因此,它形成了五個節點的循環。

      // class to provide the structure to the linked list node
      class Node{
         constructor(data) {
            this.value = data
            this.next = null;
         }
      }
      // function to add values in a linked list
      function push(data, head) {
         var new_node = new Node(data);
         if(head == null) {
            head = new_node;
            return head;
         }
         var temp = head
         while(temp.next != null) {
            temp = temp.next;
         }
         temp.next = new_node;
         return head;
      }
      // function to find the length in the loop 
      function length(loop_node) {
         var count = 1;
         var temp = loop_node;
         while(temp.next != loop_node) {
            count++;
            temp = temp.next;
         }
         console.log("The length of the loop in the given linked list is: " + count);
      }
      // function to find the cycle in the given list 
      // if the cycle is found then call the length function 
      function find_node(head) {
         var slow_ptr = head;
         var fast_ptr = head;
         while(slow_ptr != null && fast_ptr != null && fast_ptr.next != null) {
            slow_ptr = slow_ptr.next;
            fast_ptr = fast_ptr.next.next;
            if(slow_ptr == fast_ptr) {
               length(slow_ptr);
               return;
            }
         }
         console.log("There is no loop present in the given linked list");
      }
      
      var head = null;
      
      head = push(1,head)
      head = push(2,head)
      head = push(3,head)
      head = push(4,head)
      head = push(5,head)
      head = push(6,head)
      head = push(7,head)
      head = push(8,head)
      
      // making loop in a linked list by connecting 8 to four 
      var temp = head;
      while(temp.value != 4){
         temp = temp.next;
      }
      var temp2 = head;
      while(temp2.next != null){
         temp2 = temp2.next
      }
      temp2.next = temp
      // finding the length of the loop 
      find_node(head)
      

      登錄后復制

      時間和空間復雜度

      在上面的代碼中,我們只遍歷了完整的鏈表一次,循環部分最多遍歷了三次,這使得時間復雜度是線性的。因此上述代碼的時間復雜度是線性的,即 O(N),其中 N 是鏈表的大小。

      由于我們沒有使用任何額外的空間,使得程序的時間復雜度為 O(1)。

      結論

      在本教程中,我們學習了如何通過在 JavaScript 語言中實現概念來查找鏈表中存在的循環的長度。我們使用了 Floyd 的循環查找算法來查找給定鏈表中的循環,然后我們使用 while 循環來遍歷循環并找到其長度。上述代碼的時間復雜度為O(N),空間復雜度為O(1)。

      以上就是用于查找鏈表中循環長度的 JavaScript 程序的詳細內容,更多請關注www.92cms.cn其它相關文章!

分享到:
標簽:循環 查找 用于 鏈表 長度
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定