合併兩個排序的鏈表

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

有兩種方式:

一,遍歷

/*
public class ListNode {
    int val;
    ListNode next = null;
 
    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) 
    {
        if(list1==null)
            return list2;
        if(list2==null)
            return list1;
        if(list1==null&&list2==null)
       return null;
        ListNode a=list1;
        ListNode b=list2;
        ListNode temp=null; // 當作指針
        ListNode z=null;    // 緩存數組
        if(a.val<=b.val)
        {
            temp=a;
            a=a.next;
        }
        else
        {
            temp=b;
            b=b.next;
        }
        z=temp;
        while(a!=null&&b!=null)
        {
        if(a.val<=b.val)
        {
            temp.next=a;
            a=a.next;
            temp=temp.next;
        }
        else
        {
            temp.next=b;
            b=b.next;
            temp=temp.next;
        }
        }
        if(a==null)
        {
            temp.next=b;
        }
        else if(b==null)
        {
            temp.next=a;
        }
        return z;
        
    }
}

二,遞歸

/*
public class ListNode {
    int val;
    ListNode next = null;
    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
     public ListNode Merge(ListNode list1, ListNode list2) {
         if(list1 == null){
             return list2;
         }else if(list2 == null){
             return list1;
         }
         ListNode list = null;
         if(list1.val <= list2.val){
             list = list1;
             list.next = Merge(list1.next,list2);
         }
         if(list2.val < list1.val){
             list = list2;
             list.next = Merge(list1,list2.next);
         }
         return list;
     }
}

還是對遞歸不太熟悉。

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