Использование фиктивного узла для добавления меньшего узла списка l1 и списка l2.В конце возвращаем местоположение, указывающее рядом с фиктивным узлом, чтобы получить фактический объединенный отсортированный список, но получая загрузку адреса во время выполнения с недостаточным пространством для объекта типа struct ListNode при возврате dummyNode-> next.
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
if (l1 == NULL && l2 != NULL) {
return l2;
}
if (l1 != NULL && l2 == NULL) {
return l1;
}
struct ListNode *dummyNode = NULL;
struct ListNode *head = NULL;
dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode *));
head = dummyNode;
while (l1 != NULL && l2 != NULL) {
if (l1->val <= l2->val) {
head->next = l1;
l1 = l1->next;
head = head->next;
}
else {
head->next = l2;
l2 = l2->next;
head = head->next;
}
}
if (l1 != NULL) {
head->next = l1;
}
if (l2 != NULL) {
head->next = l2;
}
return dummyNode->next;
}