将两个升序链表合并为一个新的 升序 链表 (java)

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

示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:
输入:l1 = [], l2 = []
输出:[]

示例 3:
输入:l1 = [], l2 = [0]
输出:[0]

题目来源:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnnbp2/

总结:

  1. 注意ListNode 的结构即可
  2. 一定要注意画图,打草稿
  3. 业精于勤荒于嬉

2021年9月17日17:50:40

参考代码:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null ) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        ListNode temp = new ListNode();
        ListNode answer = temp;
        while (l1 != null && l2 != null){
            /**为什么这里是l1.val <= l2.val)?
            *因为:
            *1.重复的数也需要加入新的链表
            *2.由于是升序两个数都可以加入,这个不好说,写一个出来一看就明白了*/
            if (l1.val <= l2.val){
                ListNode node = new ListNode(l1.val);
                temp.next = node;
                temp = node;
                l1 = l1.next;

                /**第二种写法:*/
//                temp.next = new ListNode(l1.val);
//                l1 = l1.next;

            } else {  //此时l2.val > l1.val
                ListNode node = new ListNode(l2.val);
                temp.next = node;
                temp = node;
                l2 = l2.next;

                /**第二种写法*/
//                temp.next = new ListNode(l2.val);
//                l2 = l2.next;
            }
            /**第二种写法*/
//            temp = temp.next;
        }
 //        用于可能含有的l1或者l2的剩余元素处理(升序的这是一个很重要的条件)
        if (l1 != null){
            temp.next = l1;
        }else {
            temp.next = l2;
        }
        return answer.next;
    }
上一篇:LeetCode 2. 两数相加


下一篇:力扣--21、合并两个有序链表