<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      每日算法隨筆:環形鏈表

      題解:環形鏈表

      在這道題目中,我們需要判斷一個鏈表是否存在環。環的定義是鏈表的某個節點可以通過連續跟蹤 next 指針回到自身。如果存在這樣的環,那么就返回 true,否則返回 false

      方法一:使用哈希集合 (HashSet)

      思路

      • 遍歷鏈表,使用一個哈希集合 (HashSet) 存儲每個訪問過的節點。
      • 每遍歷一個節點時,檢查該節點是否已經存在于集合中。如果存在,說明鏈表中存在環;如果不存在,則將該節點加入集合中。
      • 如果遍歷完整個鏈表都沒有發現重復節點,說明鏈表中不存在環。

      代碼實現

      /**
       * Definition for singly-linked list.
       * class ListNode {
       *     int val;
       *     ListNode next;
       *     ListNode(int x) {
       *         val = x;
       *         next = null;
       *     }
       * }
       */
      public class Solution {
          public boolean hasCycle(ListNode head) {
              Set<ListNode> set = new HashSet<ListNode>();
              ListNode curr = head;
              while (curr != null) {
                  // 如果當前節點已經在集合中,說明有環
                  if (!set.add(curr)) {
                      return true;
                  }
                  curr = curr.next; // 繼續遍歷下一個節點
              }
              return false; // 如果遍歷到鏈表末尾沒有發現環
          }
      }
      

      復雜度分析

      • 時間復雜度:O(n),其中 n 是鏈表的節點數。我們每個節點只遍歷一次。
      • 空間復雜度:O(n),需要額外的哈希集合來存儲每個訪問的節點。

      過程解析

      1. 初始化一個空的 HashSet
      2. 從頭節點開始遍歷鏈表,每遇到一個節點,檢查它是否在 HashSet 中。如果在,說明有環,返回 true;否則,將該節點加入集合,繼續遍歷下一個節點。
      3. 如果遍歷到了鏈表的末尾(即 curr == null),說明鏈表沒有環,返回 false

      方法二:快慢指針 (Floyd 判圈算法)

      思路

      • 使用兩個指針:一個快指針 (fast),一個慢指針 (slow)。
      • 快指針每次走兩步,慢指針每次走一步。
      • 如果鏈表中沒有環,快指針會在遍歷完鏈表時到達 null
      • 如果鏈表中有環,快指針會最終追上慢指針,兩者會相遇。

      代碼實現

      /**
       * Definition for singly-linked list.
       * class ListNode {
       *     int val;
       *     ListNode next;
       *     ListNode(int x) {
       *         val = x;
       *         next = null;
       *     }
       * }
       */
      public class Solution {
          public boolean hasCycle(ListNode head) {
              if (head == null || head.next == null) return false;
      
              ListNode slow = head; // 慢指針
              ListNode fast = head.next; // 快指針
      
              // 快慢指針相遇說明有環
              while (fast != slow) {
                  if (fast == null || fast.next == null) return false; // 快指針提前到達終點,說明沒有環
                  fast = fast.next.next; // 快指針走兩步
                  slow = slow.next; // 慢指針走一步
              }
      
              return true; // 兩個指針相遇,說明有環
          }
      }
      

      復雜度分析

      • 時間復雜度:O(n),其中 n 是鏈表的節點數。最壞情況下,快指針和慢指針遍歷鏈表中的每個節點。
      • 空間復雜度:O(1),我們只用了常數級別的額外空間。

      過程解析

      1. 快指針 fast 每次走兩步,慢指針 slow 每次走一步。
      2. 如果鏈表中有環,快指針最終會追上慢指針,這時返回 true
      3. 如果快指針在遍歷過程中到達了 null,則鏈表沒有環,返回 false

      方法比較:

      1. 哈希集合法使用了額外的存儲空間,但思路簡單易懂,適合初學者。
      2. 快慢指針法雖然稍微復雜一點,但它不需要額外的空間,能夠以 O(1) 的空間復雜度解決問題,在面試中常被要求使用這種方法。

      這道題目考察了鏈表的基本操作以及快慢指針的應用,通過分析鏈表的結構,可以更好地掌握鏈表與指針的使用。

      posted @ 2024-09-10 15:08  魚擺擺不擺  閱讀(59)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久人妻av无码中文专区| 少妇裸交aa大片| 真实国产老熟女无套内射| 亚洲欧洲日产国码久在线| 亚洲人成网网址在线看| 久久碰国产一区二区三区| 免费超爽大片黄| 国产精品视频免费一区二区三区| 中文成人在线| 国产亚洲精品综合一区二区| 国产二区三区不卡免费| 成人亚洲国产精品一区不卡| 亚洲人成色99999在线观看| 亚洲色大成网站WWW永久麻豆| 国产精品综合av一区二区国产馆 | 久久久久香蕉国产线看观看伊| 怡红院一区二区三区在线| 天天爽夜夜爱| 无遮无挡爽爽免费视频| 亚洲精品宾馆在线精品酒店| 欧美在线观看www| 国产人免费人成免费视频| 日韩V欧美V中文在线| 国产国产人免费人成免费| 伊人精品成人久久综合97| 99国产精品一区二区蜜臀| 国产精品亚洲av三区色| 最新的国产成人精品2020| 好看的国产精品自拍视频| 四虎影视一区二区精品| 亚洲爆乳WWW无码专区| 夜夜躁狠狠躁日日躁| 国产真实乱对白精彩久久老熟妇女| 亚洲欧美中文字幕日韩一区二区| 成人免费毛片aaaaaa片| 国产av丝袜旗袍无码网站| 久久夜色国产噜噜亚洲av| 国产suv精品一区二区四| 临朐县| 熟妇人妻任你躁在线视频| 人妻日韩人妻中文字幕|