https://leetcode.cn/problems/merge-two-sorted-lists/?envType=study-plan-v2&envId=top-100-liked
将两个有序的链表合并为一个新的有序链表,那不就是和归并排序中最后合并的思想一样吗?只不过那里合并的是数组,这里合并的是链表。
首先:如果有一个链表为空,那就直接返回另一个链表。
同样,如果都为空,就返回NULL。
同归并类似,如果合并过程中,有一个链表合并完成后,就将另一个链表的剩余部分全部接在最终链表的后面。
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
if (list1 == NULL)
return list2;
if (list2 == NULL)
return list1;
struct ListNode* head; //创建头结点
if (list1->val < list2->val) {
head = list1;
list1 = list1->next;
} else {
head = list2;
list2 = list2->next;
}
struct ListNode* tmp = head; //用tmp来链接
while (list1 && list2) {
if (list1->val < list2->val) {
tmp->next = list1;
list1 = list1->next;
tmp = tmp->next;
} else {
tmp->next = list2;
list2 = list2->next;
tmp = tmp->next;
}
}
if (list1 == NULL) {
tmp->next = list2;
}
if (list2 == NULL) {
tmp->next = list1;
}
return head;
}