劍指Offer:面試題17——合併兩個排序的鏈表

題目描述

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

思路1:

分別用p1,p2兩個指針掃描兩個有序鏈表,p3指針去構建新鏈表h3.
p1.val <= p2.val,則p3把p1指向的結點加入h3,p1後移動。反之,對p2進行對應操作。

代碼:(未驗證正確性,提交時顯示超時,所以不知道功能是否實現,還是僅僅時間複雜度高?)

public ListNode Merge(ListNode list1,ListNode list2) {

        if(list1 == null){
            return list2;
        }
        if(list2 == null){
            return list1;
        }

        ListNode p1 = list1;
        ListNode p2 = list2;

        ListNode list3;
        if(list1.val <= list2.val){
            list3 = list1;
        }else{
            list3 = list2;
        }
        ListNode p3 = list3;


        while(p1 != null && p2 != null){

            if(p1.val <= p2.val){
                p3.next = p1;
                p1 = p1.next;

            }else{
                p3.next = p2;
                p2 = p2.next;
            }

            p3 = p3.next;
        }

        if(p1 == null){
            p3.next = p2;
        }

         if(p2 == null){
            p3.next = p1;
        }

        return list3;
    }

思路2:

採用遞歸的思想

代碼:

public ListNode Merge(ListNode list1,ListNode list2) {

        if(list1 == null){
            return list2;
        }
        if(list2 == null){
            return list1;
        }

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

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