【LeetCode题解】21.Merge Two Sorted Lists

来源:互联网 发布:音箱推荐 知乎 编辑:程序博客网 时间:2024/04/30 02:27

题意为将两个已经排好序的链表合并为一个新的有序链表

可以用递归和非递归两种方法解决问题:

(1)非递归

首先需要创建一个新的链表,然后依次遍历两个链表,并将两个数组中较小的元素依次插入新链表中。

值得注意的是,若一个链表为空或已经遍历完全,则将另一个链表插入即可

class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        ListNode *head = new ListNode(-1);        ListNode *p1 = l1;        ListNode *p2 = l2;        ListNode *curNode = head;        while(p1 && p2)        {            if( p1->val < p2->val )            {                curNode->next = p1;                curNode = curNode->next;                p1 = p1->next;            }            else if(p2->val < p1->val )            {                curNode->next = p2;                curNode = curNode->next;                p2 = p2->next;            }            else            {                curNode->next = p1;                curNode = curNode->next;                p1 = p1->next;                curNode->next = p2;                curNode = curNode->next;                p2 = p2->next;            }        }        if(p1)        {            curNode->next = p1;        }        if(p2)        {            curNode->next = p2;        }        return head->next;    }};
(2)递归

考虑,若链表l1为空,则返回l2链表;若l2链表为空,则返回l1链表

若两链表均非空,则比较链表l1和l2的第一个元素,若l1较小,则继续比较l1->next和l2的第一个元素大小,并返回l1

class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        if(l1 == NULL)        {            return l2;        }        if(l2 == NULL)        {            return l1;        }        if(l1->val < l2->val)        {            l1->next = mergeTwoLists(l1->next,l2);            return l1;        }        if(l2->val <= l1->val)        {            l2->next = mergeTwoLists(l1,l2->next);            return l2;        }    }};

0 0
原创粉丝点击