1. 程式人生 > 其它 >leetcode 20 合併兩個有序連結串列

leetcode 20 合併兩個有序連結串列

合併兩個有序連結串列

將兩個升序連結串列合併為一個新的 升序 連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。

輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

直接迭代

注意點:使用哨兵節點

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
       ListNode ret = new ListNode(-1);
        ListNode temp= ret;
        //l1和l2都不空時,誰的值小,把誰的頭放上去
        while(l1!=null&&l2!=null){
            if(l1.val<= l2.val){
                temp.next=l1;
                temp=temp.next;
                l1=l1.next;
            }
            else{
                temp.next=l2;
                temp=temp.next;
                l2=l2.next;
            }
        }
        //迴圈終止時,至多有一個非空
        temp.next=l1==null?l2:l1;
        return ret.next;
    }
}

遞迴

如果l1或l2為空,就返回另外一個
如果不為空,就比較兩個節點值的大小,決定放入遞迴的節點

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
       if(l1==null){
            return l2;
        }
        else if(l2==null){
            return l1;
        }
        else if(l1.val<=l2.val){
            l1.next=mergeTwoLists(l1.next,l2);
            return l1;
        }
        else{
            l2.next=mergeTwoLists(l2.next,l1);
            return l2;
        }
    }
}