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

合并两个排序的链表

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;
        }
全部评论

相关推荐

02-25 21:07
中北大学 Python
初创团队 实习生 1500房补加每天450块钱
点赞 评论 收藏
分享
2024-12-29 19:48
河北科技大学 Java
我真的会练有氧:1.如果没有实习经验,项目一个太少了 2.项目的需求描述不要写成用xxx实现了xxx。写明具体的需求功能就可以,除非是你想特别突出让面试官问的问题 3.证书就一个4级没必要摆上去,摆上去显得你就只有一个4级 4.技术栈太少了,且比较简略,可以加点分布式,常用的微服务组件,架构设计等等信息 个人意见,不喜勿喷
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务