劍指offer 16:合併兩個排序的鏈表-- Java實現

劍指offer每日一題算法題(java解法)

方便日後複習,從今天開始。

算法之行始於足下

[編程題]鏈合併兩個排序的鏈表-- Java實現

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

非遞歸

解題思路:
1.就是創建一個頭指針root,和一個位移指針head,root=head.
2.判斷兩個鏈表指針的值大小,誰小就把誰的值放入head的next中,
然後,放進去了,自然指針要後移了,繼續比較下一個,於是head=list,
list=list.next,list位移到下一個元素,反之,如果list2小,也是一樣把它給head.next,再位移到下一位,直到小的一方數組爲空,則把大的一方數組直接接在head.next後面

/*
public class ListNode {
    int val;
    ListNode next = null;
        ListNode(int val) {
        this.val = val;
    }
}*/


public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        ListNode head=new ListNode(-1);
        head.next=null;
        ListNode root=head;
        while(list1!=null && list2!=null){
            if(list1.val<list2.val){
                head.next=list1;
                head=list1;
                list1=list1.next;
            }else{
                head.next=list2;
                head=list2;
                list2=list2.next;
            }
        }
        if(list1!=null)
        head.next=list1;
        if(list2!=null)
        head.next=list2;
        return root.next;
    }
}

遞歸

解題思路:
1.先判斷兩個鏈表不能爲空
2.與非遞歸一樣思路,比較子節點的值,誰小誰就放進head指針裏面(這裏head沒有next就直接讓head=list就可以)然後就把小的值放進head裏面了,至於位移的話,這裏跟非遞歸的區別在於,它採用把list.next下一個值傳進函數,再次比較,而不是位移,這樣就能循環比較,而且把值放入了head.next裏面

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