目录
题目

解法一:迭代
cpp
struct ListNode* merge(struct ListNode* head1, struct ListNode* head2)
{
struct ListNode* virHead = malloc(sizeof(*virHead));
struct ListNode* preNode = virHead;
while (head1 && head2)
{
if (head1->val < head2->val)
{
preNode->next = head1;
head1 = head1->next;
}
else
{
preNode->next = head2;
head2 = head2->next;
}
preNode = preNode->next;
}
preNode->next = head1 ? head1 : head2;
struct ListNode* retHead = virHead->next;
free(virHead);
return retHead;
}
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
return merge(list1, list2);
}
解法二:递归
cpp
void swap(struct ListNode** a, struct ListNode** b)
{
struct ListNode* tmp = *a;
*a = *b;
*b = tmp;
}
struct ListNode* merge(struct ListNode* head1, struct ListNode* head2)
{
if (!head1)
return head2;
if (!head2)
return head1;
if (head1->val > head2->val)
swap(&head1, &head2);
head1->next = merge(head1->next, head2);
return head1;
}
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
return merge(list1, list2);
}