将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
解题思路:
首先比较两个链表的头结点,值较小的头结点作为新链表的头结点。接下来又比较剩余部分两个链表的头结点,较小的作为新链表的下一个节点,以此类推。因此,该题目是一个递归过程,可以定义递归函数来完成合并:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;//l1为空直接返回l2
if(l2==NULL)
return l1; //同理,l2为空直接返回l1
ListNode *newListNode=NULL;
if(l1->val<l2->val) //比较两个链表头结点的值的大小
{
newListNode=l1; //值较小的节点作为新链表的头结点
newListNode->next=mergeTwoLists(l1->next,l2); //进行递归过程
}
else
{
newListNode=l2;
newListNode->next=mergeTwoLists(l1,l2->next);
}
return newListNode;
}
};