程序员代码面试指南 2.19:合并两个有序的单链表

https://www.nowcoder.com/practice/98a51a92836e4861be1803aaa9037440

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;
}

主要是为左程云的《程序员代码面试指南》这本书改写C++版的题解。

全部评论

相关推荐

在等offer的火锅...:我去履历这么好,都找不到工作吗?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务