黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

leetcode------Intersection of Two Linked Lis

系統 2194 0

Write a program to find the node at which the intersection of two singly linked lists begins.

?

For example, the following two linked lists:

    A:          a1 → a2

                   ↘

                     c1 → c2 → c3

                   ↗            

B:     b1 → b2 → b3


  

begin to intersect at node c1.

?

Notes:

    • If the two linked lists have no intersection at all, return? null .
    • The linked lists must retain their original structure after the function returns.
    • You may assume there are no cycles anywhere in the entire linked structure.
    • Your code should preferably run in O(n) time and use only O(1) memory.

?

本題的思路還是比較多的,我剛開始想了幾個最后做出來后參考解決方法耶有幾個我總結如下:

方法一:將headA先遍歷到最后然后將結尾鏈接到headA頭部,構造成了一個有環的鏈表然后然后利用一個指針一個慢指針去跑,具體怎么找可以參考我前面寫過的那個”Linked List Cycle II“=======》最后結果是正確的但是結果說不讓修改鏈表結構。

?

方法二:先求出headA和headB的長度然后算出headA和headB的長度差,長度差就是A或者B多出來的長度,減去長度差然后同時往后遍歷即可找到相交的點,小提示:在求headA和headB長度的時候比較一下最后的那個節點,如果不相等則肯定沒有交點。=======》算法通過 時間復雜度O(m+n)

方法三:暴力比較,時間復雜度O(mn)。

方法四:分別遍歷A和B,放入hash中進行比較,如果有出現相同hash則為相交點。

方法五:用兩個指針A,B去遍歷headA和headB,A從headA遍歷到最后時,轉到headB頭開始遍歷。反之,B從headB轉到A,每次比較一次節點,如果相同則為相交點。時間復雜度O(n+m)

?

我感覺方法五是很牛逼的。。。。。我只是實現了方法2.

具體代碼如下:

      
         1
      
      
        /**
      
      
         2
      
      
         * Definition for singly-linked list.


      
      
         3
      
      
         * public class ListNode {


      
      
         4
      
      
         *     int val;


      
      
         5
      
      
         *     ListNode next;


      
      
         6
      
      
         *     ListNode(int x) {


      
      
         7
      
      
         *         val = x;


      
      
         8
      
      
         *         next = null;


      
      
         9
      
      
         *     }


      
      
        10
      
      
         * }


      
      
        11
      
      
        */
      
      
        12
      
      
        public
      
      
        class
      
      
         Solution {


      
      
        13
      
      
        public
      
      
         ListNode getIntersectionNode(ListNode headA, ListNode headB) {


      
      
        14
      
      
        if
      
      (headA==
      
        null
      
      ||headB==
      
        null
      
      ) 
      
        return
      
      
        null
      
      
        ;


      
      
        15
      
               ListNode list1=
      
        headA;


      
      
        16
      
               ListNode list2=
      
        headB;


      
      
        17
      
      
        int
      
       len1=1,len2=1
      
        ,length;


      
      
        18
      
      
        while
      
      (list1.next!=
      
        null
      
      
        ){


      
      
        19
      
                   list1=
      
        list1.next;


      
      
        20
      
                   len1++
      
        ;


      
      
        21
      
      
                }


      
      
        22
      
      
        while
      
      (list2.next!=
      
        null
      
      
        ){


      
      
        23
      
                   list2=
      
        list2.next;


      
      
        24
      
                   len2++
      
        ;


      
      
        25
      
      
                }


      
      
        26
      
      
        if
      
      (list1.val!=list2.val)
      
        return
      
      
        null
      
      
        ;


      
      
        27
      
      
        if
      
      (len1-len2>0
      
        ){


      
      
        28
      
                   length=len1-
      
        len2;


      
      
        29
      
      
        for
      
      (
      
        int
      
       i=0;i<length;i++
      
        ){


      
      
        30
      
                       headA=
      
        headA.next;


      
      
        31
      
      
                    }


      
      
        32
      
      
                }


      
      
        33
      
      
        else
      
      
        {


      
      
        34
      
                   length=len2-
      
        len1;


      
      
        35
      
      
        for
      
      (
      
        int
      
       i=0;i<length;i++
      
        ){


      
      
        36
      
                       headB=
      
        headB.next;


      
      
        37
      
      
                    }


      
      
        38
      
      
                }


      
      
        39
      
      
        while
      
      (headA!=
      
        null
      
      
        ){


      
      
        40
      
      
        if
      
      (headA.val==headB.val)
      
        return
      
      
         headA;


      
      
        41
      
                   headA=
      
        headA.next;


      
      
        42
      
                   headB=
      
        headB.next;


      
      
        43
      
      
                }


      
      
        44
      
      
        return
      
      
        null
      
      
        ;


      
      
        45
      
      
            }


      
      
        46
      
      
        47
      
      
        48
      
       }
    

?

leetcode------Intersection of Two Linked Lists


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論