合并链表题解

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一(迭代)

​ 迭达是遍历的一种重要方法,已经知道两个链表是按顺序进行排列的,分别去寻找两个链表,如果链表A的值小于等于链表B的值,A链表加入到新链表C中,并且A链表去头操作,复杂度O(m+n)

代码

public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode merge = new ListNode(-1);
    ListNode head = merge; //记录新链表的头
    while (l1 != null && l2 != null) {
        if(l1.val <= l2.val){
            merge.next = new ListNode(l1.val);
            l1=l1.next;
        }else {
            merge.next = new ListNode(l2.val);
            l2 = l2.next;
        }
        merge = merge.next;
    }
    merge.next =l1==null?l2:l1; //使用三目表达式
    return head.next;
}

方法二(递归)

递归yyds,考虑边界条件,即当一个链表为空时,结束递归,用栈的思想记录路径

public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        if (l2 == null) return l1;
        if(l1.val > l2.val){
            l2.next=mergeTwoLists(l1,l2.next);
            return l2;
        }else {
            l1.next=mergeTwoLists(l1.next,l2);
            return l1;
        }
    }
最后修改:2021 年 02 月 14 日
如果觉得我的文章对你有用,请随意赞赏