剑指Offer17合并两个排序的链表

题目:

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

这个题目很简单,下面直接看代码,我用两种方式实现了题目的要求,递归的方法是书上写的,很短小,也很经典。非递归方法有大的冗余。

递归:

ListNode * Merge(ListNode * List1,ListNode * List2)
{

    if(List1 == NULL)
        return List2;
    else if(List2 == NULL)
        return List1;

    ListNode * Head = NULL;

    if((List1->m_nValue) < (List2->m_nValue) )
    {
        Head = List1;
        Head->m_pNext = Merge(List1->m_pNext,List2);
    }
    else
    {
        Head = List2;
        Head->m_pNext = Merge(List1,List2->m_pNext);
    }
    return Head;
}

非递归:

ListNode * MergeNoQianTao(ListNode * list1,ListNode * list2)
{


    ListNode * Head = NULL;
    ListNode * result = Head;
    if(list1 == NULL)
        return list2;
    else if(list2 == NULL)
        return list1;
    if(list1->m_nValue > list2->m_nValue)
    {
        Head = list2;
        result = Head;
        list2 = list2->m_pNext;
         if(list2 == NULL)
        {
            Head->m_pNext = list1;
            return result;
        }

    }
    else
    {
        Head = list1;
        result = Head;
        list1 = list1->m_pNext;
        if(list1 == NULL)
        {
            Head->m_pNext = list2;
            return result;
        }
    }

    while(list1 != NULL && list2 != NULL)
    {
        if(list1->m_nValue < list2->m_nValue)
        {
            Head->m_pNext = list1;
            Head = Head->m_pNext;
            list1 = list1->m_pNext;
            if(list1 == NULL)
            {
                Head->m_pNext = list2;
                return result;
            }
        }
        else
        {
            Head->m_pNext = list2;
            Head = Head->m_pNext;
            list2 = list2->m_pNext;
            if(list2 == NULL)
            {
                Head->m_pNext = list1;
                return result;
            }

        }
    }
    return result;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值