LeetCode题解21(C++实现)
- 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:
递归解决,终止条件:l1为空或者l2位空(同时为空已经在l1那里判断了)
怎样递归:
l1的值比较小或者两个值相等,就把l1->next和l2合并,放进l1->next,返回l1;
l2的值比较小,就把l1和l2->next合并,放进l2->next,返回l2;
代码:
/**
-
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;
if(l2 ==NULL)
return l1;
if(l1->val < l2->val)
{
l1->next = mergeTwoLists(l1->next,l2);
return l1;
}
else
{
l2->next = mergeTwoLists(l1,l2->next);
return l2;
}}
};