【牛客网】合并两个排序的链表

来源:互联网 发布:怎样用mysql创建数据库 编辑:程序博客网 时间:2024/06/01 16:25
  • 题目:
    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

  • 超时的代码:

class Solution {public:    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)    {     ListNode* k;    if (pHead1 == NULL && pHead2 == NULL)return NULL;    if (pHead1 == NULL)return pHead2;    if (pHead2 == NULL)return pHead1;    ((pHead1->val) > (pHead2->val)) ? k = pHead1 : k = pHead2;    ListNode* m=k;    while (pHead1 != NULL && pHead2 != NULL){        if ((pHead1->val) >= (pHead2->val)){            k->next= pHead2;            pHead2 = pHead2->next;            k = k->next;        }        else{            k->next = pHead1;            pHead1 = pHead1->next;            k = k->next;        }    }    if (pHead1 ==NULL && pHead2 == NULL){        k->next = NULL;    }    else if (pHead1 == NULL){        while (pHead2 != NULL){            k->next = pHead2;            pHead2 = pHead2->next;            k = k->next;        }        k->next = NULL;    }    else{        while (pHead1 != NULL){            k->next = pHead1;            pHead1 = pHead1->next;            k = k->next;        }        k->next = NULL;    }    return m;    }};//这里没有考虑到用递归的思想
  • 剑指Offer上的代码
class Solution {public:    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)    {        if (pHead1 == NULL)           return pHead2;        else if (pHead2 == NULL)           return pHead1;        ListNode* pMergedHead = NULL;        if (pHead1->val < pHead2->val){             pMergedHead = pHead1;             pMergedHead->next = Merge(pHead1->next, pHead2);        }        else{            pMergedHead = pHead2;            pMergedHead->next = Merge(pHead1, pHead2->next);        }        return pMergedHead;    }};//这里用递归算法进行归并,太好了
0 0
原创粉丝点击