欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

題目一:合并兩個(gè)有序鏈表

題目鏈接

題目一思路

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

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

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

依次移動(dòng)t1和t2指針,誰(shuí)小,誰(shuí)就接入進(jìn)來(lái)。依次操作,直到兩個(gè)鏈表都遍歷完畢為止。

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

題目一完整代碼

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) {
            // 如果任何一個(gè)鏈表為空,那么直接返回另外一個(gè)鏈表即可
            return l1 == null ? l2 : l1;
        }
        // 誰(shuí)小誰(shuí)作為頭
        ListNode head = l1.val > l2.val ? l2 : l1;
        // t1 和 t2 表示l1和l2下一個(gè)要遍歷的位置
        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鏈表接入進(jìn)來(lái)即可
                cur.next = t2;
                t2 = t2.next;
                cur = cur.next;
                continue;
            }
            if (t2 == null) {
                // l2鏈表已經(jīng)到頭,剩下只需要把l2鏈表接入進(jìn)來(lái)即可
                cur.next = t1;
                t1 = t1.next;
                cur = cur.next;
                continue;
            }
            // l1和l2都沒(méi)有到頭,那么誰(shuí)小誰(shuí)接入進(jìn)來(lái)即可。
            if (t1.val > t2.val) {
                cur.next = t2;
                t2 = t2.next;
            } else {
                cur.next = t1;
                t1 = t1.next;
            }
            cur = cur.next;
        }
        return head;
    }
}

題目二:合并多個(gè)有序鏈表

23. Merge k Sorted Lists

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

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

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

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

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

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

如果X比堆頂元素大,則堆頂元素彈出,X進(jìn)入小根堆

如果X比堆頂元素小,則直接不需要進(jìn)入堆頂,作為結(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合并兩個(gè)及以上有序鏈表的示例詳解的文章就介紹到這了,更多相關(guān)Java合并有序鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于java String中intern的深入講解

    關(guān)于java String中intern的深入講解

    這篇文章主要給大家介紹了關(guān)于java String中intern的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • springboot 使用yml配置文件自定義屬性的操作代碼

    springboot 使用yml配置文件自定義屬性的操作代碼

    在SpringBoot中yml/yaml文件可以自定義一些屬性,以供注入給自定義bean對(duì)象的屬性,主要通過(guò)空格和層次來(lái)實(shí)現(xiàn),類似于python代碼,本文通過(guò)實(shí)例代碼給大家介紹springboot 使用yml配置文件自定義屬性,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • SpringBoot注入Bean的四種方式總結(jié)

    SpringBoot注入Bean的四種方式總結(jié)

    這篇文章主要給大家總結(jié)SpringBoot注入Bean的四種方式,啟動(dòng)類注入Bean,啟動(dòng)類掃描@ComponentScan,啟動(dòng)類@EnableConfigurationProperties以及啟動(dòng)類@Import這四種方式,文章通過(guò)代碼示例講解非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Spring Boot 實(shí)現(xiàn)程序的優(yōu)雅退出(詳細(xì)步驟)

    Spring Boot 實(shí)現(xiàn)程序的優(yōu)雅退出(詳細(xì)步驟)

    Spring Boot 為我們提供了優(yōu)雅退出的功能,使應(yīng)用程序能夠在關(guān)閉時(shí)正常處理完所有當(dāng)前請(qǐng)求,避免請(qǐng)求被中斷導(dǎo)致數(shù)據(jù)丟失或不一致等問(wèn)題,本文將全面介紹如何在 Spring Boot 應(yīng)用程序中實(shí)現(xiàn)優(yōu)雅退出,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Sax解析xml_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Sax解析xml_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Sax解析xml,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 微服務(wù)中使用Maven BOM來(lái)管理你的版本依賴詳解

    微服務(wù)中使用Maven BOM來(lái)管理你的版本依賴詳解

    這篇文章主要介紹了微服務(wù)中使用Maven BOM來(lái)管理你的版本依賴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java FileWriter 追加文件及文件改名方式

    java FileWriter 追加文件及文件改名方式

    這篇文章主要介紹了java FileWriter 追加文件及文件改名的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • IDEA如何設(shè)置SVN提交忽略文件 target.iml

    IDEA如何設(shè)置SVN提交忽略文件 target.iml

    使用IDEA的SVN插件時(shí),可能會(huì)遇到提交不必要文件的問(wèn)題,解決這個(gè)問(wèn)題有兩種方法:第一種是在IDEA設(shè)置中的File Types下的Ignore files and folders添加需要忽略的文件或文件夾;第二種是使用SVN客戶端TortoiseSVN,在項(xiàng)目目錄點(diǎn)擊右鍵選擇properties
    2024-10-10
  • java接口使用默認(rèn)方法的講解

    java接口使用默認(rèn)方法的講解

    在本篇文章里小編給大家整理了一篇關(guān)于java接口使用默認(rèn)方法的講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • java中求高精度除法,要求保留N位小數(shù)

    java中求高精度除法,要求保留N位小數(shù)

    這篇文章主要介紹了java中求高精度除法,要求保留N位小數(shù)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論