合并兩個有序鏈表(LeetCode--21.合并兩個有序鏈表)

題目描述

兩個升序鏈表合并為一個新的升序鏈表。

示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

解析

考察重點:迭代實現(xiàn)與遞歸實現(xiàn)
實現(xiàn)方法
  1. 方法一:迭代實現(xiàn)很簡單,兩個指針分別遍歷兩個鏈表,比較當前結點的大小,依次鏈接到新表上即可洗做。
  2. 方法二:遞歸實現(xiàn)驯嘱,遞歸是算法設計中常用的技巧灶壶,函數(shù)調用自己本身义郑,局部求解最后得出全部求解。比較兩個鏈表的第一個結點丈钙,從鏈表中取下較小的元素的結點非驮,余下部分形成新的鏈表與另外一個鏈表再做合并,依次遞歸雏赦。
實現(xiàn)技巧:

遞歸實現(xiàn)在算法設計中得到廣泛的應用劫笙。

迭代實現(xiàn)代碼
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    /*如果其中一個鏈表為null,則返回另一個鏈表即可*/
    if(l1 == null){
        return l2;
    }
    if(l2 == null){
        return l1;
    }
    ListNode head = new ListNode(-1);//定義結果的頭結點
    ListNode tail = head;//定義結果的尾指針
    while(l1 != null && l2 != null){//遍歷兩個鏈表按照數(shù)據(jù)升序鏈接到新的鏈表中
        if(l1.val < l2.val){
            tail.next = l1;
            tail = tail.next;
            l1 = l1.next;
        }else {
            tail.next = l2;
            tail = tail.next;
            l2 = l2.next;
        }
    }
    /*其中一個鏈表先遍歷完全星岗,另外一個鏈表鏈接到新表尾部即可*/
    if(l1 == null){
        tail.next = l2;
     }else{
        tail.next = l1;
    }
    ListNode res = head.next;//指向新表的第一個結點
    head.next = null;//幫助GC回收head結點
    return res;
}
遞歸實現(xiàn)代碼
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    /*遞歸結束的條件填大,如果有一個鏈表為null,則返回另一個鏈表俏橘,不再執(zhí)行遞歸操作*/
    if(l1 == null){
        return l2;
    }
    if(l2 == null){
        return l1;
    }
    /*定義res指向兩個鏈表中元素較小的結點*/
    ListNode res;
    /*取出元素較小結點允华,余下部分組成新的鏈表*/
    if(l1.val < l2.val){
        res = l1;
        l1 = l1.next;//余下部分組成新的鏈表l1
    }else {
        res = l2;
        l2 = l2.next;//余下部分組成新的鏈表l2
    }
    res.next = mergeTwoLists(l1, l2);//遞歸調用,res的next指向新的兩個鏈表合并結果
    return res;
}

總結

迭代實現(xiàn)易于理解寥掐、編碼復雜靴寂,遞歸實現(xiàn)編碼簡單,但對于初學者難理解召耘。不過兩種方法都是算法設計中的重點百炬,更好的掌握和理解對于解決問題很有用。未來還會遇到其他的需要兩種方法實現(xiàn)的算法污它,例如最經(jīng)典的就是樹的遍歷剖踊,遞歸實現(xiàn)和迭代實現(xiàn)(非遞歸實現(xiàn))庶弃。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市德澈,隨后出現(xiàn)的幾起案子歇攻,更是在濱河造成了極大的恐慌,老刑警劉巖圃验,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掉伏,死亡現(xiàn)場離奇詭異,居然都是意外死亡澳窑,警方通過查閱死者的電腦和手機斧散,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摊聋,“玉大人鸡捐,你說我怎么就攤上這事÷椴茫” “怎么了箍镜?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煎源。 經(jīng)常有香客問我色迂,道長,這世上最難降的妖魔是什么手销? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任歇僧,我火速辦了婚禮,結果婚禮上锋拖,老公的妹妹穿的比我還像新娘诈悍。我一直安慰自己,他們只是感情好兽埃,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布侥钳。 她就那樣靜靜地躺著,像睡著了一般柄错。 火紅的嫁衣襯著肌膚如雪舷夺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天鄙陡,我揣著相機與錄音冕房,去河邊找鬼。 笑死趁矾,一個胖子當著我的面吹牛耙册,可吹牛的內容都是我干的。 我是一名探鬼主播毫捣,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼详拙,長吁一口氣:“原來是場噩夢啊……” “哼帝际!你這毒婦竟也來了?” 一聲冷哼從身側響起饶辙,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蹲诀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弃揽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脯爪,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年矿微,在試婚紗的時候發(fā)現(xiàn)自己被綠了痕慢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡涌矢,死狀恐怖掖举,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情娜庇,我是刑警寧澤塔次,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站名秀,受9級特大地震影響励负,放射性物質發(fā)生泄漏。R本人自食惡果不足惜匕得,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一熄守、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耗跛,春花似錦、人聲如沸攒发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惠猿。三九已至羔砾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間偶妖,已是汗流浹背姜凄。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趾访,地道東北人态秧。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像扼鞋,于是被迫代替她去往敵國和親申鱼。 傳聞我的和親對象是個殘疾皇子愤诱,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容