合并两个排序的链表

合并两个排序的链表

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;
    }
};

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

全部评论

相关推荐

肥沃富饶:可能初创公司,老板不懂技术
点赞 评论 收藏
分享
2024-12-21 10:42
已编辑
江西软件职业技术大学 Java
新宿站不停:该提升学历就提升学历,菜了就多练。没事找牛马公司虐自己是吧? 谁没事说自己“经验少”,这不自己把自己塞剎鼻hr嘴里找🐴吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务