合并兩個(gè)排序的鏈表

《劍指offer》面試題25:輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。

思路一:歸并排序的思想(非遞歸方式)

代碼如下:

public ListNode merge1(ListNode list1,ListNode list2) {
    if (list1 == null) {
        return list2;
    } else if (list2 == null) {
        return list1;
    } else {
        ListNode node1 = list1;
        ListNode node2 = list2;
        // 確定合并后的新鏈表的頭節(jié)點(diǎn)
        ListNode mergeHead = null;
        if (node1.val > node2.val) {
            mergeHead = node2;
            node2 = node2.next;
        } else {
            mergeHead = node1;
            node1 = node1.next;
        }
        // 歸并的過(guò)程
        ListNode curNode = mergeHead;
        while (node1 != null && node2 != null) {
            if (node1.val > node2.val) {
                curNode.next = node2;
                node2 = node2.next;
            } else {
                curNode.next = node1;
                node1 = node1.next;
            }
            curNode = curNode.next;
        }
        // 有一個(gè)鏈表歸并完,另一個(gè)鏈表剩余的節(jié)點(diǎn)接上
        if (node1 == null) {
            curNode.next = node2;
        }
        if (node2 == null) {
            curNode.next = node1;
        }
        return mergeHead;
    }
}

思路二:每次比較兩個(gè)節(jié)點(diǎn)的val的大小實(shí)際是重復(fù)的過(guò)程,可以借助遞歸函數(shù)實(shí)現(xiàn)。

代碼如下:

public ListNode merge2(ListNode list1,ListNode list2) {
    if (list1 == null) {
        return list2;
    } else if (list2 == null) {
        return list1;
    } else {
        ListNode mergeHead = null;
        if (list1.val > list2.val) {
            mergeHead = list2;
            mergeHead.next = merge2(list1,list2.next);
        } else {
            mergeHead = list1;
            mergeHead.next = merge2(list1.next,list2);
        }
        return mergeHead;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。 第一種 使用一個(gè)du...
    lvlvforever閱讀 275評(píng)論 0 0
  • 題目描述 輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。 代碼實(shí)現(xiàn) ...
    _minimal閱讀 2,550評(píng)論 1 0
  • 題目描述 輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。 解題思路 ...
    請(qǐng)收下章魚(yú)君的膝蓋閱讀 372評(píng)論 0 9
  • 題目描述 輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。 思路 首先...
    Max_7閱讀 136評(píng)論 0 0
  • 題目 輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。 思路 基本思路...
    Joseph_Chu閱讀 184評(píng)論 0 0

友情鏈接更多精彩內(nèi)容