题目描述
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路:
这里使用递归的方法。构造一个新的ListNode为tmp,当某个链表为空了,就返回另一个。核心是比较当前两个节点值大小,如果l2的小,那么对于l2的下一个节点和l1调用递归函数,将返回值赋值给 tmp->next ,然后返回tmp;否则就对于l1的下一个节点和l2调用递归函数,将返回值赋值给 tmp->next ,然后返回tmp,依次递归下去。
代码展示:
class Solution
{
public
:
ListNode
* mergeTwoLists(ListNode
*l1
, ListNode
*l2
) {
if (l1
== NULL) return l2
;
if (l2
== NULL) return l1
;
if (l1
->val
> l2
->val
) {
ListNode
*tmp
= l2
;
tmp
->next
= mergeTwoLists(l1
, l2
->next
);
return tmp
;
} else {
ListNode
*tmp
= l1
;
tmp
->next
= mergeTwoLists(l1
->next
, l2
);
return tmp
;
}
}
};