日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 2056 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.

?

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

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

?

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

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

方法四:分別遍歷A和B,放入hash中進(jìn)行比較,如果有出現(xiàn)相同hash則為相交點(diǎn)。

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

?

我感覺方法五是很牛逼的。。。。。我只是實(shí)現(xiàn)了方法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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 青州市| 呼伦贝尔市| 廊坊市| 衡阳县| 康平县| 苍梧县| 临武县| 罗平县| 梓潼县| 连江县| 大庆市| 安康市| 正阳县| 淄博市| 河北区| 和政县| 垦利县| 富宁县| 新昌县| 庆城县| 上饶县| 蒙自县| 德令哈市| 九寨沟县| 阜城县| 揭西县| 巴中市| 梅河口市| 岱山县| 寿宁县| 利川市| 习水县| 景谷| 沙河市| 云和县| 南京市| 轮台县| 昆明市| 监利县| 宜兰县| 绥江县|