Leetcode算法Java全解答--21. 合并两个有序链表.md

Posted by lizhao on 07-09,2019

Leetcode算法Java全解答--21. 合并两个有序链表

[toc]

题目

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

示例:

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

想法

声明结果链表C,同时遍历2个链表A和B,

比对2个链表当前值的数据大小,

如果A比B小,就往结果链表C中赋值,然后A链表往前走

反之则B链表往前走

复杂度n/n

结果

超过99%的测试案例

复杂度n/n

总结

代码

我的答案

       /**************************************
     * 题目
     * 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
     *
     * 示例:
     *
     * 输入:1->2->4, 1->3->4
     * 输出:1->1->2->3->4->4
     **************************************/

    /**************************************
     *
     * 想法:
     *
     *      声明结果链表C,同时遍历2个链表A和B,
     *      比对2个链表当前值的数据大小,
     *      如果A比B小,就往结果链表C中赋值,然后A链表往前走
     *      反之则B链表往前走
     *
     *
     * 我的做法
     * 超过99%的测试案例
     *
     * ***********************************/
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }

        ListNode result = new ListNode(0);

        ListNode cur = result;
        ListNode cur1 = l1;
        ListNode cur2 = l2;

        if (cur1.val < cur2.val) {
            cur.val = cur1.val;
            cur1 = cur1.next;
        } else {
            cur.val = cur2.val;
            cur2 = cur2.next;
        }

        while (cur1 != null || cur2 != null) {
            if (cur1 == null) {
                cur.next = cur2;
                return result;
            }
            if (cur2 == null) {
                cur.next = cur1;
                return result;
            }

            if (cur1.val < cur2.val) {
                cur.next = cur1;
                cur1 = cur1.next;
            } else {
                cur.next = cur2;
                cur2 = cur2.next;
            }
            cur = cur.next;
        }

        return result;
    }

大佬们的答案


    public ListNode better(ListNode l1, ListNode l2) {
        ListNode result = new ListNode(0);
        ListNode tmp = result;
        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                tmp.next = l1;
                l1 = l1.next;
                tmp = tmp.next;
            } else {
                tmp.next = l2;
                l2 = l2.next;
                tmp = tmp.next;
            }
        }
        if (l1 == null) {
            tmp.next = l2;
        }
        if (l2 == null) {
            tmp.next = l1;
        }
        return result.next;
    }

测试用例

    @Test
    public void test021() {
        ListNode listNode11 = new ListNode(1);
        ListNode listNode12 = new ListNode(2);
        ListNode listNode13 = new ListNode(4);
        listNode11.next = listNode12;
        listNode12.next = listNode13;

        ListNode listNode21 = new ListNode(1);
        ListNode listNode22 = new ListNode(3);
        ListNode listNode23 = new ListNode(4);
        listNode21.next = listNode22;
        listNode22.next = listNode23;

        // 测试案例期望值
        ListNode expResult1 = new ListNode(1);
        ListNode expResult12 = new ListNode(1);
        ListNode expResult13 = new ListNode(2);
        ListNode expResult15 = new ListNode(3);
        ListNode expResult16 = new ListNode(4);
        ListNode expResult17 = new ListNode(4);
        expResult1.next = expResult12;
        expResult12.next = expResult13;
        expResult13.next = expResult15;
        expResult15.next = expResult16;
        expResult16.next = expResult17;

        Solution021 solution021 = new Solution021();

        ListNode result1 = solution021.mergeTwoLists(listNode11, listNode21);

        Assert.assertEquals(expResult1.toArray(), result1.toArray());
    }

其他

代码托管码云地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git

查看其他内容可以点击专栏或者我的博客哈:https://blog.csdn.net/cmqwan

“大佬们的答案” 标签来自leetcode,侵权请联系我进行删改

如有疑问请联系,联系方式:QQ3060507060