面试题:合并两个有序的链表

题目:输入两个递增有序的链表,合并这两个链表后,使新链表中的结点 也是递增有序的。

//递归方式实现两个有序链表的合并
struct ListNode
{
    int _value;
    ListNode* _next;
    ListNode(int value)
        :_value(value)
    {}
};
ListNode* merge(ListNode* phead1, ListNode* phead2)
{
    //如果两个链表有一个为空,合并后的链表则为另一个链表
    if (phead1 == NULL)
    {
        return phead2;
    }
    else if (phead2 == NULL)
    {
        return phead1;
    }
    ListNode* mergeHead = NULL;
    //链表1的值小于链表2的值
    if (phead1->_value<phead2->_value)
    {
        mergeHead = phead1;
        mergeHead->_next = merge(phead1->_next,phead2);
    }
    else
    {
        mergeHead = phead2;
        mergeHead->_next = merge(phead1, phead2->_next);
    }
    return mergeHead;
}
//打印及测试代码
void Print(ListNode* head)
{
    while (head)
    {
        cout << head->_value << "->";
        head = head->_next;
    }
    cout << "\n";
}
void test()
{
    typedef ListNode Node;
    //创建链表1 
    Node* phead1;
    Node* n1 = new Node(1);
    Node* n2 = new Node(2);
    Node* n3 = new Node(4);
    Node* n4 = new Node(6);
    Node* n5 = new Node(7);
    phead1 = n1;
    n1->_next = n2;
    n2->_next = n3;
    n3->_next = n4;
    n4->_next = n5;
    n5->_next = NULL;

    //创建链表2
    Node* phead2;
    Node* n6 = new Node(3);
    Node* n7 = new Node(5);
    Node* n8 = new Node(8);
    Node* n9 = new Node(9);
    Node* n10 = new Node(10);
    phead2 = n6;
    n6->_next = n7;
    n7->_next = n8; 
    n8->_next = n9;
    n9->_next = n10;
    n10->_next = NULL;

    Node* ret = merge(phead1,phead2);
    Print(ret);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值