题目

  • 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例

  • 示例1

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

代码

  • 双指针遍历
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode cur1 = l1,cur2 = l2;
        ListNode dummy = new ListNode(0);
        ListNode p = dummy;
        while(cur1 != null || cur2 != null){
            // 这里要么其中一个为 null,要么都不为 null
            if(cur2 == null || (cur1 != null && cur1.val < cur2.val)){
                p.next = cur1;
                cur1 = cur1.next;
            }else{  // 这里的 cur2 肯定不会为 null
                p.next = cur2;
                cur2 = cur2.next;
            }
            p = p.next;
        }
        return dummy.next;
    }
}

代码分析:1、虽然这道题不难,但还是没想到能一次过。

// 这里要么其中一个为 null,要么都不为 null
if(cur2 == null || (cur1 != null && cur1.val < cur2.val)){
    p.next = cur1;
    cur1 = cur1.next;
}else{  // 这里的 cur2 肯定不会为 null
    p.next = cur2;
    cur2 = cur2.next;
}
p = p.next;

2、能来到 while 里面,说明 要么其中一个为 null,要么都不为 null,接下来就是要考虑其中一个为 null 的情况,如果 cur2 为 null,那就使用 cur1 就行了;如果 cur2 不为空,就转去执行 else 里的 cur2 即可。

if(cur2 == null || (cur1 != null && cur1.val < cur2.val)

3、这里的 cur1 != null 是一定要的,因为能走到 “||” 的后面,说明前面的不成立,即 cur2 不为空,那 cur1 就有可能为 null,因为这里的 cur1 和 cur2 必有一个为 null。

4、到这里,我感觉自己是有一些提升的,考虑的会周到一些,减少 bug 往往需要的就是一点点思考。

本文题目he-bing-liang-ge-pai-xu-de-lian-biao-lcof

最后修改:2022 年 01 月 18 日 07 : 01 PM
如果我的文章对你有用,请随意赞赏