题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
struct ListNode
{
int val;
struct ListNode* next;
};
思路:先将L1和L2复制到L里,在用快排重新排序
int Cmp_int(const void* p1, const void* p2)
{
return (*(int*)p1 - *(int*)p2);
}
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
if (l1 == NULL && l2 == NULL)return NULL;
if (l1 != NULL && l2 == NULL)return l1;
if (l1 == NULL && l2 != NULL)return l2;
struct ListNode* L = l1;
struct ListNode* head;
head = L;
int len1 = 1, len2 = 1;
for (L = l1; l1->next != NULL; )
{
L->next = l1->next;
L = L->next;
l1 = l1->next;
len1++;
}
L->next = l2;
L = L->next;
for (L; l2->next != NULL; )
{
L->next = l2->next;
L = L->next;
l2 = l2->next;
len2++;
}
int* arr = (int*)malloc((len1 + len2) * sizeof(int));
int i = 0;
for (L = head, i = 0; i < len1 + len2; i++)
{
arr[i] = L->val;
L = L->next;
}
qsort(arr, len1 + len2, sizeof(int), Cmp_int);
for (L = head, i = 0; L != NULL; L = L->next, i++)
{
L->val = arr[i];
}
return head;
}