劍指Offer – 合併兩個排序的鏈表

題目描述

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

代碼

// 非遞歸
public ListNode Merge(ListNode list1,ListNode list2) {
    if (list1 == null && list2 == null)
        return null;
    if (list1 == null)
        return list2;
    if (list2 == null)
        return list1;

    ListNode head = null, cur = null;
    while (list1 != null && list2 != null) {
        if (list1.val <= list2.val) {
            if (head == null) {
                head = cur =  list1;
            } else {
                cur.next = list1;
                cur = cur.next;
            }
            list1 = list1.next;
        } else {
            if (head == null) {
                head = cur = list2;
            } else {
                cur.next = list2;
                cur = cur.next;
            }
            list2 = list2.next;
        }
    }

    if (list1 == null)
        cur.next = list2;
    if (list2 == null)
        cur.next = list1;
    return head;
}

//遞歸
public ListNode Merge(ListNode list1,ListNode list2) {
    if (list1 == null && list2 == null)
        return null;
    if (list1 == null)
        return list2;
    if (list2 == null)
        return list1;

    ListNode head = null;
    if (list1.val <= list2.val) {
        head = list1;
        head.next = Merge(list1.next, list2);
    } else {
        head = list2;
        head.next = Merge(list1, list2.next);
    }
    return head;
}

文章彙總見這裏 >>劍指Offer彙總<<

更多精彩文章見這裏 >>我的學習小站<< & 更多好玩見這裏 >>技術雜談<<

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章