目錄
題目
解法一:迭代
解法二:遞歸
題目
解法一:迭代
struct ListNode* merge(struct ListNode* head1, struct ListNode* head2)
{struct ListNode* virHead = malloc(sizeof(*virHead));struct ListNode* curNode = virHead;struct ListNode* list1CurNode = head1;struct ListNode* list2CurNode = head2;while (list1CurNode && list2CurNode){if (list1CurNode->val < list2CurNode->val){curNode->next = list1CurNode;list1CurNode = list1CurNode->next;}else{curNode->next = list2CurNode;list2CurNode = list2CurNode->next;}curNode = curNode->next;}curNode->next = list1CurNode ? list1CurNode : list2CurNode;struct ListNode* retHead = virHead->next;free(virHead);return retHead;
}struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{return merge(list1, list2);
}
解法二:遞歸
struct ListNode* merge(struct ListNode* head1, struct ListNode* head2)
{if (!head1)return head2;if (!head2)return head1;if (head1->val < head2->val){head1->next = merge(head1->next, head2);return head1;}head2->next = merge(head2->next, head1);return head2;
}struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{return merge(list1, list2);
}