Easy | 剑指 Offer 25. 合并两个排序的链表

剑指 Offer 25. 合并两个排序的链表

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

示例1:

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

限制:

0 <= 链表长度 <= 1000

解题思路

设置两个指针分别指向下一个要合并节点, 然后比较其值, 将其较小值接入新链表。并且可以引入一个哑节点统一操作。

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    if (l1 == null | l2 == null) {
        // 如果有链表为空, 则返回另一个链表
        return l1 == null ? l2 : l1;
    }
    ListNode cur1 = l1, cur2 = l2;
    // 建一个哑节点, 用于统一操作
    ListNode head = new ListNode(0);
    ListNode pre = head;
    while(cur1 != null && cur2 != null) {
        if (cur1.val < cur2.val) {
            pre.next = cur1;
            cur1 = cur1.next;
        } else {
            pre.next = cur2;
            cur2 = cur2.next;
        }
        pre = pre.next;
    }
    // 跳出循环时, 必定有一个链表为空,然后将另外一个链表接在后边
    pre.next = (cur1 != null) ? cur1 : cur2;
    return head.next;
}
原文地址:https://www.cnblogs.com/chenrj97/p/14294027.html