【剑指offer】合并两个排序的链表

来源:互联网 发布:淘宝评价是怎么排序的 编辑:程序博客网 时间:2024/05/22 15:42
时间限制:1秒 空间限制:32768K 热度指数:103217

本题知识点: 链表

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

方法一:非递归

/*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 == NULL)            return pHead2;        if(pHead2 == NULL)            return pHead1;                               ListNode* res = (pHead1->val < pHead2->val) ? pHead1 : pHead2;                       ListNode* p1 = pHead1;        ListNode* p2 = pHead2;                    while(p1 != NULL && p2 != NULL)        {            if(p1->val < p2->val)            {                while(p1->next != NULL && p1->next->val < p2->val)                    p1 = p1->next;                                ListNode* tmp1 = p1->next;                p1->next = p2;                 p1 = tmp1;            }            else            {                while(p2->next != NULL && p2->next->val < p1->val)                    p2 = p2->next;                                ListNode* tmp2 = p2->next;                p2->next = p1;                p2 = tmp2;                           }                                        }        return res;    }};

方法二:递归
/*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 == NULL)            return pHead2;        if(pHead2 == NULL)            return pHead1;                if(pHead1->val <= pHead2->val)        {            pHead1->next = Merge(pHead1->next,pHead2);            return pHead1;        }        else        {            pHead2->next = Merge(pHead1,pHead2->next);            return pHead2;        }                           }};



0 0