1、思路

  • 同时遍历两条有序链表,将较少的节点接到head之后;

  • 当一条链表遍历完毕后,直接将另一条链表剩余部分全部接在后面即可。

2、代码

list_node * merge_list(list_node * head1, list_node * head2)
{
    list_node *head = new list_node(), *p = head;

    while (head1 != nullptr && head2 != nullptr)    //两条链表都不为空时
    {
        if (head1->val < head2->val)                //每次选择较小的节点
        {
            p = p->next = head1;
            head1 = head1->next;
        }
        else
        {
            p = p->next = head2;
            head2 = head2->next;
        }
    }

    if (head1 != nullptr) p->next = head1;          //判断两条链表是否有剩余
    if (head2 != nullptr) p->next = head2;

    return head->next;
}