题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 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 -100 −100 <= Node.val <= 100 100 100
- l1 和 l2 均按 非递减顺序 排列
代码
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *pre = head;
head->next = NULL;
while(list1 != NULL && list2 != NULL){
if(list1->val < list2->val){
pre->next = list1;
list1 = list1->next;
}
else{
pre->next = list2;
list2 = list2->next;
}
pre = pre->next;
}
if(list1 != NULL){
pre->next = list1;
}
if(list2 != NULL){
pre->next = list2;
}
struct ListNode *result = head->next;
free(head);
return result;
}