劍指offer面試17 合併兩個排序的鏈表

一、題目

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

二、分析

  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;
        }
    }
發佈了104 篇原創文章 · 獲贊 108 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章