21. 合并两个有序链表(java实现)--LeetCode

目录

题目:

解法1:迭代(新建链表)

解法2:递归


题目:

https://leetcode-cn.com/problems/merge-two-sorted-lists/

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解法1:迭代(新建链表)

/**
 * 思路:
 * 新建一个节点
 * 一直往前遍历2个链表
 * 比较l1和l2的值,新链表指向值小的那个节点
 * 如果一个链表走完了,直接把另一个链表加过去
 */
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(-1);
        ListNode node=head;
        while (l1!=null&&l2!=null){
            if (l1.val<l2.val){
                node.next=l1;
                node=node.next;
                l1=l1.next;
            }else {
                node.next=l2;
                node=node.next;
                l2=l2.next;
            }
        }
        node.next=l1==null?l2:l1;
        return head.next;
    }

时间复杂度:On

空间复杂度:O1

解法2:递归

/**
 * 思路:
 * 递归,每层找到最小的,指向下一个小的(递归的在去找小的)
 * 如果走完了一个链条,直接返回另外一个链条就是最终的结果
 */
    public 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;
        }
    }

时间复杂度:On

空间复杂度:O1

猜你喜欢

转载自blog.csdn.net/qq_38783664/article/details/110394691