劍指offer面試17 合併兩個排序的連結串列

頭像是我偶像發表於2017-07-07

一、題目

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

二、分析

  1. 如果連結串列1為空,將輸出連結串列2;
  2. 如果連結串列2為空,將輸出連結串列1;
  3. 如果連結串列1和連結串列2都不為空,則比較指向連結串列1和連結串列2的節點值,如果指標1的節點值小於指標2的節點值,則將輸出連結串列的指標指向指標1;反之則將輸出連結串列的指標指向指標2;
  4. 當連結串列1再次為空時,將輸出連結串列指向指標2;
  5. 當連結串列2再次為空時,將輸出連結串列指向指標1;

三、程式碼實現

/*
 * 題目:
 * 輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。 
 */
public class Test17 {
    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1 == null){
            return list2;
        }
        if(list2 == null){
            return list1;
        }
        ListNode head = null;
        //確定輸出連結串列的頭結點
        if(list1.value < list2.value){
            head = list1;
            list1 = list1.next;
        }else{
            head = list2;
            list2 = list2.next;
        }
        ListNode temp = head;
        while(list1 != null && list2 != null){
            if(list1.value < list2.value){
                temp.next = list1;
                temp = temp.next;
                list1 = list1.next;
            }else{
                temp.next = list2;
                temp = temp.next;
                list2 = list2.next;
            }
        }
        if(list1 == null){
            temp.next = list2;
        }
        if(list2 == null){
            temp.next = list1;
        }
        return head;
    }
}

四、遞迴實現

//遞迴實現
    public ListNode Merge2(ListNode list1,ListNode list2) {
        if(list1 == null){
            return list2;
        }
        if(list2 == null){
            return list1;
        }
        ListNode head = null;
        if(list1.value < list2.value){
            head = list1;
            head.next = Merge2(list1.next, list2);
        }else{
            head = list2;
            head.next = Merge2(list1, list2.next);
        }
        return head;
    }
    public void display(ListNode head){
        if(head == null){
            return;
        }
        ListNode temp = head;
        while(temp != null){
            System.out.print(temp.value+",");
            temp = temp.next;
        }
    }

相關文章