合併兩排序連結串列
阿新 • • 發佈:2018-11-08
題目描述
輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
如上圖所示,將連結串列1和連結串列2合併的結果就是連結串列3.即合併後的連結串列單調不減.
解題思路:
如圖,首先比較p1
,p2
兩個鏈頭節點,將數值小的節點作為新的連結串列的頭結點,然後將p1
的第二個節點作為鏈頭與p2
進行比較,較小的作為新鏈的第2個節點,如此反覆,這種情況很容易想到使用遞迴方式來解.
示例程式碼
static class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; } } public static ListNode merge(ListNode list1, ListNode list2) { if (list1 == null) { return list2; } if (list2 == null) { return list1; } ListNode head; if (list1.val < list2.val) { list1.next = merge(list1.next, list2); head = list1; } else { list2.next = merge(list1, list2.next); head = list2; } return head; }
這裡需要注意的是特殊值的處理,即當一個空連結串列與另一個非空連結串列進行合併時,只需要返回非空連結串列即可.