合并两个排序的链表

合并两个排序的链表

https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=13&tqId=11169&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

非递归

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        ListNode *head=NULL;
        if(pHead1==NULL) return pHead2;
        else if(pHead2==NULL) return pHead1;
        ListNode *p;
        while(pHead1!=NULL&&pHead2!=NULL)
        {
           if(pHead1->val>pHead2->val)
           {
               if(head==NULL)
                   p=head=pHead2;
               else{
                    p->next=pHead2;
                    p=p->next;
               }
                pHead2=pHead2->next;
           }
            else{
                if(head==NULL)
                   p=head=pHead1;
               else {
                   p->next=pHead1;
                   p=p->next;
               }
                pHead1=pHead1->next;
            }
        }
        if(pHead1!=NULL) p->next=pHead1;
        if(pHead2!=NULL) p->next=pHead2;
        return head;
    }
};

递归形式
非递归形式类似于归并排序两个数组
主要是新链表第一个头节点的处理
比较之后先判断一下新链表头节点有没有赋值,没有的话先赋值,并将p指向新链表最后一个结点
否则让p指向两个链表中大的那一个

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

递归形式很好理解,每次都返回两个列表中大的那个结点;

全部评论

相关推荐

07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
无能的丈夫:但我觉得这个hr语气没什么问题啊(没有恶意
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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