链表——合并两个“非递减”链表

合并两个排序的链表

http://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337

①自己写的错是:写成了两个链表第一个比较,然后放在一号位和二号位。
实际上,不一定一定是121212,可能是{1,2,3,4,5}和{2,2,2,2,2,2},也就是说,每次
只选出两指针中一个最小的值,采用了哪一个就移动下一位,没被采用的那个指针不动。

不递归

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(!pHead1)return pHead2;
        if(!pHead2)return pHead1;

        ListNode* result;
        if( pHead1->val>=pHead2->val )
        {
            result = pHead2;
            pHead2 = pHead2->next;
        }else{
            result = pHead1;
            pHead1 = pHead1->next;
        }    //result头节点一定分配完毕了
        ListNode* p = result;
        while(pHead1&&pHead2)
        {
               if(pHead1->val<=pHead2->val)
               {
                   p->next = pHead1;
                   pHead1 = pHead1->next;
                   p =p->next;
               }else{
                    p->next = pHead2;
                    pHead2 = pHead2->next;
                    p = p->next;
               }
        }
        if(pHead1==NULL)
        {
            p->next = pHead2;
        }
        if(pHead2==NULL){
            p->next = pHead1;
        }
        return result;



    }
};

递归版本

 ListNode* result;
        if(!pHead1)return pHead2;
        if(!pHead2)return pHead1;
        if(pHead1->val<=pHead2->val)
        {
            pHead1->next = Merge(pHead1->next,pHead2);
            return pHead1;
        }else{
            pHead2->next = Merge(pHead2->next,pHead1);
            return pHead2;
        }
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务