最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java合并兩個及以上有序鏈表的示例詳解

 更新時間:2022年11月24日 10:53:01   作者:Grey  
這篇文章主要通過兩個例題為大家介紹一下Java合并兩個及以上有序鏈表的實現(xiàn)方法,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,需要的可以參考一下

題目一:合并兩個有序鏈表

題目鏈接

題目一思路

設(shè)置兩個指針,一個指針(t1)指向l1鏈表頭,另外一個指針(t2)指向l2鏈表頭。

首先判斷l(xiāng)1和l2的第一個元素,誰小,誰就是最后要返回的鏈表的頭節(jié)點,如果l1和l2的第一個元素相等,隨便取哪個都可以。

這樣,我們就設(shè)置好了要返回鏈表的頭節(jié)點,假設(shè)頭節(jié)點是head,

依次移動t1和t2指針,誰小,誰就接入進來。依次操作,直到兩個鏈表都遍歷完畢為止。

此外,有個顯而易見的結(jié)論:如果l1和l2有一個鏈表為空,則返回那個不為空的鏈表即可

題目一完整代碼

public class LeetCode_0021_MergeTwoSortedLists {

    public static class ListNode {
        public int val;
        public ListNode next;
    }

    public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null || l2 == null) {
            // 如果任何一個鏈表為空,那么直接返回另外一個鏈表即可
            return l1 == null ? l2 : l1;
        }
        // 誰小誰作為頭
        ListNode head = l1.val > l2.val ? l2 : l1;
        // t1 和 t2 表示l1和l2下一個要遍歷的位置
        ListNode t1 = head == l1 ? l1.next : l1;
        ListNode t2 = head == l2 ? l2.next : l2;
        ListNode cur = head;
        while (t1 != null || t2 != null) {
            if (t1 == null) {
                // l1鏈表已經(jīng)到頭,剩下只需要把l2鏈表接入進來即可
                cur.next = t2;
                t2 = t2.next;
                cur = cur.next;
                continue;
            }
            if (t2 == null) {
                // l2鏈表已經(jīng)到頭,剩下只需要把l2鏈表接入進來即可
                cur.next = t1;
                t1 = t1.next;
                cur = cur.next;
                continue;
            }
            // l1和l2都沒有到頭,那么誰小誰接入進來即可。
            if (t1.val > t2.val) {
                cur.next = t2;
                t2 = t2.next;
            } else {
                cur.next = t1;
                t1 = t1.next;
            }
            cur = cur.next;
        }
        return head;
    }
}

題目二:合并多個有序鏈表

23. Merge k Sorted Lists

題目二關(guān)鍵思路

準備一個小根堆,并把每個鏈表的頭節(jié)點加入到小根堆中,此時,小根堆堆頂彈出的節(jié)點一定是最后生成鏈表的頭節(jié)點。

假設(shè)鏈表為:L1,L2...LN

第一步,先將L1,L2...LN的頭節(jié)點L1H,L2H...LNH加入小根堆

第二步,從小根堆堆頂彈出一個元素,作為最后鏈表的頭節(jié)點。

第三步,第二步中彈出節(jié)點所在的鏈表假設(shè)是i號鏈表,那么就找彈出節(jié)點的下一個位置(假設(shè)為X)再和小根堆堆頂元素比較:

如果X比堆頂元素大,則堆頂元素彈出,X進入小根堆

如果X比堆頂元素小,則直接不需要進入堆頂,作為結(jié)果鏈表

題目二完整代碼

public class LeetCode_0023_MergeKSortedLists {

    public static class ListNode {
        int val;
        ListNode next;
    }

    public static ListNode mergeKLists(ListNode[] lists) {
        if (null == lists || lists.length == 0) {
            return null;
        }
        if (1 == lists.length) {
            return lists[0];
        }
        // 小根堆
        PriorityQueue<ListNode> queue = new PriorityQueue<>(Comparator.comparingInt(o -> o.val));
        for (ListNode list : lists) {
            if (null != list) {
                queue.add(list);
            }
        }
        ListNode res = queue.poll();
        ListNode head = res;
        while (!queue.isEmpty()) {
            if (res != null) {
                ListNode n = res.next;
                if (n == null) {
                    res.next = queue.poll();
                    res = res.next;
                } else if (n.val > queue.peek().val) {
                    res.next = queue.poll();
                    res = res.next;
                    queue.add(n);
                } else {
                    res = res.next;
                }
            }
        }
        return head;
    }
}

到此這篇關(guān)于Java合并兩個及以上有序鏈表的示例詳解的文章就介紹到這了,更多相關(guān)Java合并有序鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea使用pagehelper實現(xiàn)后端分頁功能的步驟詳解

    idea使用pagehelper實現(xiàn)后端分頁功能的步驟詳解

    這篇文章主要介紹了idea使用pagehelper實現(xiàn)后端分頁功能的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring Boot Filter 過濾器的使用方式

    Spring Boot Filter 過濾器的使用方式

    這篇文章主要介紹了Spring Boot Filter 過濾器的使用方式,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • java生成圖片驗證碼示例代碼

    java生成圖片驗證碼示例代碼

    這篇文章主要為大家詳細介紹了java生成圖片驗證碼示例代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Spring如何基于注解配置使用ehcache

    Spring如何基于注解配置使用ehcache

    這篇文章主要介紹了Spring如何基于注解配置使用ehcache,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • java實現(xiàn)去除ArrayList重復(fù)字符串

    java實現(xiàn)去除ArrayList重復(fù)字符串

    本文主要介紹了java實現(xiàn)去除ArrayList重復(fù)字符串,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Mybatis Plus 實現(xiàn)批量插入的示例代碼

    Mybatis Plus 實現(xiàn)批量插入的示例代碼

    本文主要介紹了Mybatis Plus 實現(xiàn)批量插入的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問題

    Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問題

    背包問題是一個非常典型的考察動態(tài)規(guī)劃應(yīng)用的題目,對其加上不同的限制和條件,可以衍生出諸多變種,若要全面理解動態(tài)規(guī)劃,就必須對背包問題了如指掌
    2022-02-02
  • Java8特性之用Stream流代替For循環(huán)操作詳解

    Java8特性之用Stream流代替For循環(huán)操作詳解

    這篇文章主要介紹了Stream流代替For循環(huán)進行輸出,這樣可以使代碼更簡潔,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-09-09
  • 微信小程序獲取手機號,后端JAVA解密流程代碼

    微信小程序獲取手機號,后端JAVA解密流程代碼

    這篇文章主要介紹了微信小程序獲取手機號,后端JAVA解密流程的代碼,幫助大家更好的利用Java開發(fā),感興趣的朋友可以了解下
    2020-09-09
  • C++ 虛函數(shù)與純虛函數(shù)代碼詳解

    C++ 虛函數(shù)與純虛函數(shù)代碼詳解

    本文主要介紹了C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

深圳市| 桑植县| 绥宁县| 莒南县| 抚松县| 阳江市| 阳江市| 成武县| 虞城县| 商都县| 乌什县| 清新县| 涞源县| 广元市| 庆云县| 庆阳市| 吉木萨尔县| 加查县| 汨罗市| 井研县| 双柏县| 奉新县| 鹤庆县| 尖扎县| 星座| 贵港市| 吉林省| 鱼台县| 双柏县| 云南省| 图片| 大城县| 安平县| 五寨县| 泾源县| 定边县| 海城市| 宜兰市| 简阳市| 邹平县| 开原市|