1. 程式人生 > >合併兩排序連結串列

合併兩排序連結串列

題目描述

輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。

如上圖所示,將連結串列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;
    }

這裡需要注意的是特殊值的處理,即當一個空連結串列與另一個非空連結串列進行合併時,只需要返回非空連結串列即可.