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

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

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

      【LeetCode 160】算法:相交鏈表 —— 雙指針法和數學法

      題目:給你兩個單鏈表的頭節點 headA 和 headB ,請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點,返回 null 。題目數據 保證 整個鏈式結構中不存在環。注意,函數返回結果后,鏈表必須 保持其原始結構 。

      image


      有幾種不同的算法思路解決這道算法:

      1. 雙指針法:

      • 使用兩個指針分別遍歷兩個鏈表,如果兩個鏈表相交,那么這兩個指針最終會在相交點相遇;如果兩個鏈表不相交,那么這兩個指針最終都會到達各自鏈表的末尾(即 null)。

      • 時間復雜度是 O(m + n),空間復雜度是 O(1),其中 m 和 n 分別是兩個鏈表的長度,因為最多遍歷每個鏈表兩次。

      2. 哈希表法:

      • 遍歷其中一個鏈表,將所有節點存儲在哈希表中。

      • 遍歷另一個鏈表,檢查每個節點是否在哈希表中。

      • 時間復雜度:O(m + n),空間復雜度:O(m),其中 m 和 n 分別是兩個鏈表的長度。

      3. 數學法:

      • 計算兩個鏈表的長度,然后讓較長的鏈表先移動到與較短的鏈表長度相同的位置,再同時遍歷兩個鏈表。

      • 時間復雜度:O(m + n),空間復雜度:O(1)。

      4. 遞歸法:

      • 使用遞歸遍歷兩個鏈表,直到找到相交點或到達鏈表末尾。

      • 時間復雜度:O(m + n),空間復雜度:O(h),其中 h 是遞歸深度。

      由于雙指針法和數學法不需要使用額外的空間,空間復雜度是O(1),所以我采用雙指針法和數學法解決這道題目,下面給出這兩個方法的具體步驟和代碼。

      一、雙指針法

      算法步驟:

      1. 初始化兩個指針:分別指向兩個鏈表的頭節點 headA 和 headB。

      2. 遍歷鏈表:同時遍歷兩個鏈表,直到兩個指針都到達 null。

      3. 指針重置:如果兩個指針都到達了 null,則說明兩個鏈表不相交,返回 null。否則,將兩個指針重置到對方的鏈表頭節點。

      4. 再次遍歷:再次同時遍歷兩個鏈表,這次如果兩個鏈表相交,兩個指針將在相交點相遇;如果不相交,兩個指針最終都會到達 null。

      5. 返回結果:如果兩個指針相遇,返回相遇的節點;否則返回 null。

      Java 代碼:

      public class Solution {
          public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
              ListNode pointerA = headA;
              ListNode pointerB = headB;
      
              while (pointerA != pointerB) {
                  pointerA = (pointerA == null) ? headB : pointerA.next;
                  pointerB = (pointerB == null) ? headA : pointerB.next;
              }
      
              return pointerA; // 當兩個指針相遇時,返回相遇的節點
          }
      }
      

      二、數學法

      算法步驟:

      1. 計算長度:分別計算兩個鏈表的長度。

      2. 找齊頭尾:讓較長的鏈表先移動,使其頭指針與較短的鏈表頭指針相距相同的步數。

      3. 同時遍歷:從兩個鏈表的頭指針開始,同時遍歷兩個鏈表,如果兩個鏈表相交,那么這兩個指針最終會在相交點相遇;如果不相交,那么兩個指針最終都會到達 null。

      Java 代碼:

      public class Solution {
          public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
              if (headA == null || headB == null) {
                  return null;
              }
      
              // 計算兩個鏈表的長度
              int lenA = 0, lenB = 0;
              ListNode tmpA = headA, tmpB = headB;
              while (tmpA != null) {
                  lenA++;
                  tmpA = tmpA.next;
              }
              while (tmpB != null) {
                  lenB++;
                  tmpB = tmpB.next;
              }
      
              // 讓較長的鏈表先移動,使其頭指針與較短的鏈表頭指針相距相同的步數
              while (lenA > lenB) {
                  headA = headA.next;
                  lenA--;
              }
              while (lenB > lenA) {
                  headB = headB.next;
                  lenB--;
              }
      
              // 從兩個鏈表的頭指針開始,同時遍歷兩個鏈表
              while (headA != null && headA != headB) {
                  headA = headA.next;
                  headB = headB.next;
              }
      
              // 如果兩個鏈表相交,返回相交的節點;否則返回null
              return headA;
          }
      }
      
      posted @ 2025-07-28 15:11  junjunyi  閱讀(37)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 三年片在线观看免费观看高清动漫| 成人爽A毛片在线视频淮北| 精品国产这么小也不放过| 四虎国产精品永久入口| 日韩精品久久一区二区三| 精品免费看国产一区二区| 精品乱码一区二区三四五区| 色综合欧美亚洲国产| 欧美国产综合视频| 中文字幕久久精品波多野结| 国精产品999国精产| 蜜臀视频在线观看一区二区| 精选国产av精选一区二区三区| 国产av无码专区亚洲av软件| 亚洲精品美女久久久久9999| 丁香婷婷激情俺也去俺来也| 999精品全免费观看视频| 国产AV福利第一精品| 精品国产亚洲午夜精品a| 电影在线观看+伦理片| 蜜臀久久精品亚洲一区| 国产美女在线观看大长腿| 强d乱码中文字幕熟女1000部| 老司机亚洲精品一区二区| 丰满少妇高潮在线播放不卡| 亚洲av乱码久久亚洲精品| 国产一区二区日韩经典| 久久久久成人片免费观看蜜芽| 亚洲综合欧美在线…| 中文字幕一区二区三区久久蜜桃| 亚洲欧美综合一区二区三区| 少妇被爽到高潮喷水久久欧美精品| 国产精品免费第一区二区| 日韩精品一区二区三区中文无码| 无码国产精品一区二区VR老人| 久久婷婷五月综合色和啪| 欧美日韩一线| 国产午夜精品福利免费不| 国产国产午夜福利视频| 国产在线中文字幕精品| 欧美高清freexxxx性|