题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
解题思路
对两个链表进行分析,若链表1的头节点小于链表2的头节点,则将链表1的头节点“弹出”,并将其添加到新的合成链表后面,链表1剩下的部分和链表2再进行比较,重复上述过程,直到两个两个链表为空。比较和“弹出”的过程是重复的,因此可采用递归法进行实现。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if(l1 == NULL)
return l2;
if(l2 == NULL)
return l1;
struct ListNode *phead = NULL;
if(l1->val < l2->val)
{
phead = l1;
phead->next = mergeTwoLists(l1->next, l2);
}
else
{
phead = l2;
phead->next = mergeTwoLists(l1, l2->next);
}
return phead;
}